【问题标题】:One-line for loop as a function argument单行 for 循环作为函数参数
【发布时间】:2018-06-20 16:29:22
【问题描述】:
def strange_syntax(stuff):
    return ".".join(item for item in stuff)

此代码如何(以及为什么)工作?这里会发生什么?通常我不能使用这种语法。此外,如果它不在某些 function 作为参数中,则此语法不存在。

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

def normal_syntax(stuff):
    return ".".join(stuff)

【问题讨论】:

    标签: python for-loop syntactic-sugar


    【解决方案1】:

    这称为generator expression。

    它就像列表推导式一样工作(但会延迟评估迭代对象,而不是从它们构建新列表),但您使用括号而不是括号来创建它们。您可以在只有一个参数的函数调用中去掉括号。

    在您的特定情况下,不需要生成器表达式(如您所述)-(item for item in stuff) 给出与stuff 相同的结果。当对(item.strip() for item in stuff)(地图)或(item for item in stuff if item.isdigit())(过滤器)等项目进行操作时,这些表达式开始变得有意义。

    【讨论】:

    【解决方案2】:

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

    f(a for a in b)
    

    隐式编译为生成器,意思是

    f((a for a in b))
    

    这只是语法糖,让程序看起来更漂亮。直接在控制台写没多大意义

    >>>a for a in b
    

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2017-04-18
      • 1970-01-01
      • 1970-01-01
      • 2020-04-19
      • 1970-01-01
      • 1970-01-01
      • 2021-01-11
      • 1970-01-01
      相关资源
      最近更新 更多