Python 学习中的问题

2017-02-25 22:00:46 +08:00
 yyy32

def count():

fs = []
for i in range(1, 4):
    def f():
         return i*i
    fs.append(f)
return fs

f1, f2, f3 = count()

这个代码中 为什么单独运行 f1=count ()会报错呢 typeerror

还有就是为什么 f1 , f2=count () 也会报错 valueerror

为什么这 2 个报错还不一样呢

1941 次点击
所在节点    Python
9 条回复
forrestchang
2017-02-26 06:49:02 +08:00
语法并没有错误,在 Python 3.5 中没有报错。

ryd994
2017-02-26 07:00:33 +08:00
f1, f2=count() 这个很好理解
正常来说 f1-3 三个变量,返回值是 3 函数的 list
正好一一对应
现在你只给两个变量,对应不上
yyy32
2017-02-26 09:16:05 +08:00
@forrestchang 我是在 python2.7 上运行这个的 单独运行 f1=count ()就报错了
staticor
2017-02-26 10:18:10 +08:00
记得在 Python Cookbook 第一章第一节就是讲的这个例子, 函数返回多值的 Unpacking 问题.

f1, f2 = .... 这样表示左侧是一个 tuple 要对应于右侧也是一个 tuple/或可转换的结构, 而且长度要求为 2, 否则报 ValueError



若执行 f1=count() 我这里测试也没问题, 结果用 f1[1] f1[2] 访问,
系统版本是 2.7 (sys.version_info(major=2, minor=7, micro=12, releaselevel='final', serial=0))
cyrbuzz
2017-02-26 10:21:22 +08:00
1. 2.7.11 测试不报错。
2. 三个列表是不能平均分给两个变量的。
3. 在循环里重复创建同样的函数真的好吗。。
zsz
2017-02-26 10:32:43 +08:00
@yyy32 可以加我们的群问,这样效率更高,这个群是一群工程师组建的面向初学者的 python Linux 学习群, qq 群号: 278529278 ,非商业性质,拒绝广告,只接收真正想学这方面技术的朋友,交流学习,申请请说明来自 v2ex
forrestchang
2017-02-26 12:22:10 +08:00
@yyy32 错误提示能给一下吗?
yyy32
2017-02-26 18:07:16 +08:00
@forrestchang typeerror :‘ list ’ object is not callalbe
kaneg
2017-02-26 18:32:58 +08:00
我怀疑楼主不是用 f1=count(), 而是 f1=count()()

这是一个专为移动设备优化的页面(即为了让你能够在 Google 搜索结果里秒开这个页面),如果你希望参与 V2EX 社区的讨论,你可以继续到 V2EX 上打开本讨论主题的完整版本。

https://www.v2ex.com/t/343169

V2EX 是创意工作者们的社区,是一个分享自己正在做的有趣事物、交流想法,可以遇见新朋友甚至新机会的地方。

V2EX is a community of developers, designers and creative people.

© 2021 V2EX