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