【发布时间】:2012-04-09 20:44:49
【问题描述】:
好的,我的问题可能措辞很糟糕,但这就是我的情况。
我正在尝试理解 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 就像它听起来的样子 - 一个表示某物的最大长度的数字)
提前感谢所有答案(即使他们告诉我不要成为这样的菜鸟):)
编辑:非常感谢您的回答 - 尽管我只能选择一个作为最佳答案,但他们都非常有帮助。还要感谢 cmets - 正如他们中的一些人指出的那样,What does the "yield" keyword do in Python? 是一个非常好的关于产量、生成器和迭代的一般指南,即使我没有找到它对我的具体情况的答案:)
【问题讨论】:
-
这是 Python 2 还是 Python 3?
-
嗨乔治,你的问题在这里得到了很好的回答,我觉得:stackoverflow.com/questions/231767/…
-
Python 2.7 抱歉,应该在问题中明确说明。
-
简短回答您的问题:您错误地解析了语句。
yield产生表达式(padding_zeros + number_string).encode("ascii"),正如您所猜到的,它是一个 ascii 字符串。知道yield可能会有所帮助,就像 python 2 中的print一样,它的参数不需要括号。
标签: python string generator python-2.7 yield