Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/337.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 不同生成器之间的差异,函数中的“产量”和返回元组迭代_Python_Python 3.x_Generator - Fatal编程技术网

Python 不同生成器之间的差异,函数中的“产量”和返回元组迭代

Python 不同生成器之间的差异,函数中的“产量”和返回元组迭代,python,python-3.x,generator,Python,Python 3.x,Generator,从迭代中产生i和在范围10中为i返回i之间的正确区别是什么 def发生器1: 对于范围10中的i: 产量一 def发生器2: 返回范围为10的i 例如,请参见这些函数generator1和generator2的编写方式不同,但都返回一个generator 怠速输出:- >>>发电机1 >>> >>>发电机2 >>> >>>导入系统 >>>sys.getsizeofgenerator1 >>> 88 >>>sys.getsizeofgenerator2 >>> 88 正如我们可以告诉gener

从迭代中产生i和在范围10中为i返回i之间的正确区别是什么

def发生器1: 对于范围10中的i: 产量一 def发生器2: 返回范围为10的i 例如,请参见这些函数generator1和generator2的编写方式不同,但都返回一个generator

怠速输出:-

>>>发电机1 >>> >>>发电机2 >>> >>>导入系统 >>>sys.getsizeofgenerator1 >>> 88 >>>sys.getsizeofgenerator2 >>> 88 正如我们可以告诉generator2的代码行比generator2少,而且对象的大小是相同的,我有一些问题

这两种功能的区别是什么? 打印generator2时的含义是什么? 创建生成器的哪种方法更合适、更有效?
区别在于生成器的定义位置。generator1是一个特殊的生成器函数,因为它包含一个yield语句。生成器函数始终返回生成器。在调用generator1时定义生成器。 generator2是一个正则函数,它使用生成器表达式构造生成器,然后返回它。在执行范围10中的行i for i时定义生成器。但如果您添加更多的逻辑,generator2可以返回任何其他内容,比如None。例如:

def generator2(do_generator):
    if do_generator:
        return (i for i in range(10))
    else:
        return "I quit"
你不能用generator1做那样的事情。它不能返回除生成器之外的任何内容


是生成器表达式的缩写。在你的情况下,这是我在第10区的表现。生成器表达式与列表理解非常相似,但它们生成生成器而不是列表。

区别在于生成器的定义位置。generator1是一个特殊的生成器函数,因为它包含一个yield语句。生成器函数始终返回生成器。在调用generator1时定义生成器。 generator2是一个正则函数,它使用生成器表达式构造生成器,然后返回它。在执行范围10中的行i for i时定义生成器。但如果您添加更多的逻辑,generator2可以返回任何其他内容,比如None。例如:

def generator2(do_generator):
    if do_generator:
        return (i for i in range(10))
    else:
        return "I quit"
你不能用generator1做那样的事情。它不能返回除生成器之外的任何内容


是生成器表达式的缩写。在你的情况下,这是我在第10区的表现。生成器表达式与列表理解非常相似,但它们生成生成器而不是列表。

有趣的问题,但问题的标题没有太大意义。范围10中的i for i是一个,而不是一个元组迭代。这回答了你的问题吗?但是如果像这样引入元组,那么从根本上修改函数的方式将不再与第一个类似。不要挂在生成器表达式中的圆括号上。它们与元组无关。意味着@Amitai range只是一个虚拟的可迭代对象。如果你想要一些更有趣的东西,你可以做例如,math.sqrti for i in range0,10有趣的问题,但是你的问题的标题没有什么意义。范围10中的i for i是一个,而不是一个元组迭代。这回答了你的问题吗?但是如果像这样引入元组,那么从根本上修改函数的方式将不再与第一个类似。不要挂在生成器表达式中的圆括号上。它们与元组无关。意味着@Amitai range只是一个虚拟的可迭代对象。如果你想要一些更有趣的东西,你可以做例如,math.sqrti for i,范围为0,10