What does yield do in python 2.7?
Possible Duplicate:
The Python yield keyword explained
好吧,我可能把问题说得很糟糕,但这就是我的处境。
我在python 2.7中有这一行代码,我试图理解它:
1 | yield (padding_zeros + number_string).encode("ascii") |
在这行代码中,
我很有信心,
我完全沉浸在茫茫大海中的是江户一号(3号)的所作所为。
我知道它启动了一个生成器,但是我花了很多时间在网上搜索和阅读语法,但是我仍然无法计算生成器的实际功能。这是我第一次看Python(我的最终目标是将此代码转换为C),这并没有帮助。
所以,基本上,请有人能给我解释一下这行代码的作用吗?它只是把两个字符串加在一起,还是做了一些更复杂的事情?
对于进一步的上下文,这是代码行出现在以下位置的块:
1 2 3 4 5 | for current_length in range(4, max_length + 1): for i in range(0, pow(10, current_length)): number_string = str(i) padding_zeros ="0" * (current_length - len(number_string)) yield (padding_zeros + number_string).encode("ascii") |
(
提前感谢所有的回答(即使他们告诉我不要这么无聊):)
编辑:非常感谢你的回答-尽管我只能选一个最好的答案,但是他们都很有帮助。感谢您的评论——正如他们中的一些人指出的那样,"yield"关键字在Python中做了什么?这是一个非常好的一般指南,以产量,生成器和迭代,即使我没有找到一个答案,我的具体情况:)
好吧,你知道发电机,所以
那这条线实际上是做什么的呢?不太多:
它连接
在python 3中,它是不同的;在这里,
在执行
发电机的要点是,可以将其调用为
就像在C中一样,
有关
对于语言引用(假设您使用的是python 2):http://docs.python.org/reference/index.html
在这种情况下,使用
1 2 3 4 5 6 7 8 | def f(...): for current_length in range(4, max_length + 1): for i in range(0, pow(10, current_length)): number_string = str(i) padding_zeros ="0" * (current_length - len(number_string)) yield (padding_zeros + number_string).encode("ascii") result = list(f()) |
对战
1 2 3 4 5 6 7 8 9 10 | def f(...): result = list() for current_length in range(4, max_length + 1): for i in range(0, pow(10, current_length)): number_string = str(i) padding_zeros ="0" * (current_length - len(number_string)) result.append((padding_zeros + number_string).encode("ascii")) return result result = f() |
在代码翻译中,您只需遵循第二个步骤。
生成器是一个状态机,它实现了迭代器接口或python中的"iter"。它将在"yield"之后等待,直到对其调用next()。
试试这个:
1 2 3 4 5 6 7 8 9 10 | def my_gen(): for current_length in range(4, max_length + 1): for i in range(0, pow(10, current_length)): number_string = str(i) padding_zeros ="0" * (current_length - len(number_string)) print"generate %s" % i yield (padding_zeros + number_string).encode("ascii") for i in my_gen(): print"iterate %s" % i |