python 2.7有什么收益?

可能重复:
解释了Python yield关键字

好吧,我可能很糟糕地表述了这个问题,但这是我的情况。

我在Python 2.7中有这行代码,我试图理解:

yield (padding_zeros + number_string).encode("ascii")

在这行代码中, padding_zeros是一个可变数字'0'的字符串, number_string是一个字符串形式的数字,可以是0到1之间的任何数字,比如10000。

我非常有信心.encode("ascii")只是将yield的输出转换为ascii。

我完全yield (padding_zeros + number_string)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正是它听起来像 - 一个数字表示最大长度的东西)

提前感谢任何和所有答案(即使他们告诉我不要成为这样一个狡猾的noob):)

编辑:非常感谢答案 - 即使我只能选择一个作为最好的答案,他们都非常有帮助。 还要感谢评论,正如其中一些人指出的那样,Python中的“yield”关键字是做什么的? 是一个非常好的通用指南,即使我没有找到答案来回答我的具体情况,也可以生成生成器和迭代。


好,你知道发电机,所以yield部分不需要解释。 精细。

那么这条线实际上做了什么? 不是很多:

它连接padding_zerosnumber_string ,然后将结果编码为ASCII。 在Python 2.7中,它是无操作的,因为字符串是以ASCII开始的(根据定义,它只包含ASCII数字)。

在Python 3中,它会有所不同; 这里.encode()会将字符串转换为一个bytes对象。 但在Python 2中,它没有任何意义。


yield就像是在发电机中回报。

在执行yield ,生成器函数的执行停止,并返回值。 不同之处在于,当再次调用生成器时,执行将在yield语句处重新开始,并继续执行,直到命中另一个yield,或引发(未处理的)异常,或者return命中。 return或异常将终止发生器。

生成器的要点是可以将其作为x = next(generator)x = generator.next()来调用,并且每次都会从生成器内的yield中接收值。 生成器也是可迭代的,因此它们可以用作循环的源代码: for x in generator: print x

像在C#中, . 运算符调用右侧出现在运算符左侧的方法。 因此, (padding_zeros + number_string).encode("ascii")调用encode (padding_zeros + number_string)的结果encode

有关encode的含义,请参阅:http://docs.python.org/library/stdtypes.html#str.encode

对于语言参考(假设您使用的是Python 2):http://docs.python.org/reference/index.html


在这种情况下, yield用于执行懒惰评估。 接下来的代码大致相同:

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())

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()

你可以在你的代码翻译中跟着第二个。

链接地址: http://www.djcxy.com/p/1543.html

上一篇: What does yield do in python 2.7?

下一篇: What is a "yield" statement in a function?