def strange_syntax(stuff):
return ".".join(item for item in stuff)
这段代码的工作原理(和原因)如何?这里发生了什么?通常我不能使用这种语法。如果它不在某个 function 中作为参数,则该语法也不存在。
我知道,我也可以这样做:
def normal_syntax(stuff):
return ".".join(stuff)
答案 0 :(得分:3)
它就像列表理解一样(但是懒惰地评估迭代的对象而不是从它们构建新的列表),但是使用括号而不是括号来创建它们。你可以在一个只有一个参数的函数调用中删除括号。
在您的特定情况下,不需要生成器表达式(如您所述) - (item for item in stuff)
提供与stuff
相同的结果。使用(item.strip() for item in stuff)
(地图)或(item for item in stuff if item.isdigit())
(过滤器)等项目时,这些表达式开始有意义。
答案 1 :(得分:2)
在函数调用中使用时,语法为:
f(a for a in b)
隐式编译为生成器,意思是
f((a for a in b))
这只是语法糖,使程序看起来更好。直接在控制台中编写
并没有多大意义>>>a for a in b
因为您不清楚是否要创建生成器或执行常规循环。在这种情况下,您必须使用外部()
。