Python 很难理解返回空列表的函数的行为
我正在使用一些代码,这些代码使用了一个属性,下面的例子是我与我的解释器演示的最好的例子。我很难理解为什么代码会这样工作Python 很难理解返回空列表的函数的行为,python,list,attributes,iterator,typeerror,Python,List,Attributes,Iterator,Typeerror,我正在使用一些代码,这些代码使用了一个属性,下面的例子是我与我的解释器演示的最好的例子。我很难理解为什么代码会这样工作 In [377]: def a(): .....: return [] .....: 首先,我定义了一个简单的函数,它将返回一个空列表 In [381]: a() Out[381]: [] 接下来,我迭代此函数以尝试打印: In [397]: for i in a(): .....: print a.hello .....:
In [377]: def a():
.....: return []
.....:
首先,我定义了一个简单的函数,它将返回一个空列表
In [381]: a()
Out[381]: []
接下来,我迭代此函数以尝试打印:
In [397]: for i in a():
.....: print a.hello
.....: print a.hello()
.....:
In [398]:
我没有得到任何输出。我注意到,我在执行for
循环时得到了完全相同的结果,当时我返回了元组,而不是列表
:
In [399]: def a():
.....: return ()
.....:
在我看来,这似乎与列表和元组是空的有关。然而,真正令人困惑的是,当我调用a
上的hello
属性作为for
循环的一部分时,为什么没有得到任何类型的错误。难道我不应该像一个TypeError
那样告诉我对象a
没有属性hello
和hello()
或者至少是这样的东西吗?这是怎么回事
我感谢您的解释,如果我错了,请纠正我的误解
多谢各位
for whatever in a():
do_stuff_with_whatever(whatever)
如果a()
返回一个包含元素的iterable,则只执行do\u stuff\u with\u which
。否则,第一次通过时,的值是多少
换句话说,语句a.hello
和a.hello()
永远没有机会执行,因为没有什么可重复的。如果将功能更改为:
def a():
return [1]
然后您将开始看到一个AttributeError
,因为a
没有hello
属性 多谢各位!这澄清了一切。