可能重复:
Python中的yield关键字解释
好的,我可能表达得不好,但这是我的情况。
我有一行Python 2.7的代码,我正在尝试理解它:
yield (padding_zeros + number_string).encode("ascii")
在这行代码中,
padding_zeros
是一个由变量数量的'0'组成的字符串,number_string
是一个以字符串形式表示的数字,可以是0到10000之间的任何数字。
我非常有信心,.encode("ascii")
只是将yield的输出转换为ascii。
我完全不知道yield (padding_zeros + number_string)
是做什么的。
我知道它启动了一个生成器,但我已经花了很多时间在网上搜索和阅读语法,但我仍然无法弄清楚生成器实际上做什么。这并没有帮助,因为这是我第一次接触Python(我的最终目标是将此代码转换为C#)。
所以,基本上,请有人向我解释一下这行代码的作用?它只是将两个字符串相加,还是做了更复杂的事情?
为了进一步了解背景,这是出现该行代码的块:
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")
(max_length
意思就像它的名字一样 - 表示某个东西的最大长度)
提前感谢您的任何答案(即使告诉我不要太菜):)编辑:非常感谢您的回答 - 即使我只能选择一个最佳答案,它们都非常有帮助。还要感谢评论 - 其中一些指出,Python 中 "yield" 关键字是什么? 是很好的关于 yield、生成器和迭代的通用指南,即使我没有找到它对我的特定情况的答案 :)
yield
产生表达式(padding_zeros + number_string).encode("ascii")
,这是一个 ASCII 字符串,正如你所猜测的那样。可能有帮助的是,像 Python 2 中的print
一样,yield
不需要在其参数周围加括号。 - alexispadding_zeros
和“ASCII编码”的number_string
。由于在此上下文中该编码不起作用,因此它可以工作,但这不是一个好主意。最好删除括号 和.encode()
。 - Tim Pietzcker