Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/289.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_For Loop_Syntactic Sugar - Fatal编程技术网

Python 循环的一行作为函数参数

Python 循环的一行作为函数参数,python,for-loop,syntactic-sugar,Python,For Loop,Syntactic Sugar,如何(以及为什么)使用此代码?这里发生了什么?通常我不能使用这种语法。此外,如果该语法不作为参数存在于某个函数中,则该语法不存在 我知道,我也可以这样做: def strange_syntax(stuff): return ".".join(item for item in stuff) 这被称为一个 它的工作原理与列表理解类似(但是缓慢地计算迭代对象,而不是从中构建新的列表),但是您可以使用括号而不是括号来创建它们。您可以在只有一个参数的函数调用中删除括号 在您的特定情况下,不需要生

如何(以及为什么)使用此代码?这里发生了什么?通常我不能使用这种语法。此外,如果该语法不作为参数存在于某个函数中,则该语法不存在

我知道,我也可以这样做:

def strange_syntax(stuff):
    return ".".join(item for item in stuff)
这被称为一个

它的工作原理与列表理解类似(但是缓慢地计算迭代对象,而不是从中构建新的列表),但是您可以使用括号而不是括号来创建它们。您可以在只有一个参数的函数调用中删除括号


在您的特定情况下,不需要生成器表达式(如您所述)(stuff中的项对应项)给出与
stuff
相同的结果。当使用诸如
(item.strip()表示stuff中的item)
(map)或
(item表示stuff中的item,如果item.isdigit())
(filter)等项时,这些表达式就开始有意义了。

在函数调用中使用时,语法:

def normal_syntax(stuff):
    return ".".join(stuff)
隐式编译为生成器,即

f(a for a in b)
这只是语法上的甜点,让程序看起来更好。直接在控制台中编写没有多大意义

f((a for a in b))

因为不清楚您是要创建生成器还是执行常规循环。在这种情况下,您必须使用外部
()

谢谢。我还在这里找到了关于发电机的线索,这里有很好的解释。
>>>a for a in b