表达式和函数之间的形式区别是什么?我通过观察知道其中的区别,但我正在寻找对它的透彻理解。例如,显示一些来自 Scheme 或 Python 的示例:
; scheme
(display "hello") # expression
((lambda () (display "hello"))) # unnamed lambda
(define hi (lambda () (display "hello"))) # named lambda
# python
>>> print ('hello')
>>> lambda: print ('hello')
>>> hi = lambda: print ('hello')
在我的初步思考中,我认为不同之处在于:
- 一个函数有一个名字并且可以被引用(尽管一个表达式可以被赋值给一个变量?)
- 函数可以带参数(表达式可以吗?)
- 一个函数可以有一个作用域/封装并包含多个语句。
最佳答案
您可能在这里将苹果与橙子进行比较。 表达式 是一种句法形式。它是代码的一部分,描述了代码是如何解析的。 a + b
和 print(x)
是表达式,但是 a
、b
和 也是x
。表达式通常由更小的表达式组成,通常有几层深。
函数,另一方面,关注的是语义,而不是句法。这是一个运行时值。有人可能会说
lambda x: x + 1
是一个函数。为了完全正确,我会说这些字母被解析为一个表达式,当 Python 解释器求值时,它会产生一个函数。但这太啰嗦了,所以我们通常会跳过中间人,只说 lambda 是一个函数。
将表达式赋值给变量是没有意义的。如果我写 x = 1 + 1
,我不会将 expression 1 + 1
分配给变量。我将计算一加一的结果分配给该变量。另一方面,如果我写 x = lambda: 2
,那么我实际上是在为变量 x
分配一个函数。函数存在于运行时;表达式纯粹是一个解析结构。
关于function - 表达式与函数之间的差异,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/69668612/