在 python 3 中使用分号在单行中定义 lambda 函数

ozg*_*ral 4 python lambda syntax-error python-3.x

在python3中,以下工作:

print(3); print(5)
Run Code Online (Sandbox Code Playgroud)

但是,由于分号,以下给出了语法错误:

(lambda key: (print(3); print(5)))
Run Code Online (Sandbox Code Playgroud)

为什么会这样,有没有办法在单行中编写 lambda 函数(我打算将其作为短参数传递,而不在其他地方定义该函数)

Kev*_*vin 5

现有的答案涵盖了“如何?” 的问题,而不是“为什么”。也就是说,为什么不起作用lambda: print(3); print(5)?答案就在语言规范中。

来自https://docs.python.org/3/reference/expressions.html#lambda

Lambda 表达式(有时称为 lambda 形式)用于创建匿名函数。该表达式lambda arguments: expression产生一个函数对象。[...] 请注意,使用 lambda 表达式创建的函数不能包含语句或注释。

来自https://docs.python.org/3/reference/simple_stmts.html?highlight=semicolon#simple-statements

简单的语句包含在单个逻辑行中。几个简单的语句可以出现在一行上,并用分号分隔

print(3); print(5)包含一个分号,因此它是简单语句的集合。但 lambda 不能包含语句。所以 lambda 不能包含print(3); print(5).


那么为什么(lambda key: (print(3), print(5)))有效呢?这是因为(print(3), print(5))不是一个声明。它是一个表达式:特别是,它是一个元组文字(正式来说,是一种带括号的形式,其表达式列表至少包含一个逗号),其第一个元素是对参数 3 的调用,第二个元素是对参数 5 的print调用print. 所有这些都是单个表达式,因此 lambda 可以毫无问题地接受它。