我正在使用一些代码,这些代码使用了一个属性,这个代码是我用我的解释器演示下面的例子中最好的例子。我很难理解为什么代码按照他们的方式工作。
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
而不是tuple
时,我在执行list
循环时得到的完全相同:
In [399]: def a():
.....: return ()
.....:
在我看来,这与list
和tuples
为空有关。然而,真正困惑的是当我在hello
上调用a
属性作为for
循环的一部分时,我没有遇到任何错误。我不应该像TypeError
那样告诉我对象a
没有属性hello
和hello()
或至少某些东西沿着这些线?这里发生了什么?
我感谢任何解释,如果我弄错了,请纠正我的误解。
谢谢。
答案 0 :(得分:2)
for whatever in a():
do_stuff_with_whatever(whatever)
如果do_stuff_with_whatever
返回包含元素的迭代,则仅执行a()
。否则,第一次传递时whatever
的值是多少?
换句话说,语句a.hello
和a.hello()
永远不会有机会被执行,因为没有任何东西可以迭代。如果您将功能更改为:
def a():
return [1]
然后您会看到AttributeError
,因为a
没有hello
属性。