Dav*_*542 2 expression functional-programming function
表达式和函数之间的形式区别是什么?我通过观察就知道其中的区别,但我正在寻求对其的彻底理解。例如,显示来自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')
Run Code Online (Sandbox Code Playgroud)
在我的初步思考中,我认为差异是:
您可能会在这里将苹果与橙子进行比较。表达式是一种语法形式。它是代码的一部分,描述了代码的解析方式。a + b和print(x)是表达式,但a, b, 和 也是表达式x。表达式通常由更小的表达式组成,通常有几层深。
另一方面,函数关心的是语义,而不是语法。这是一个运行时值。有人可能会说
lambda x: x + 1
Run Code Online (Sandbox Code Playgroud)
是一个函数。为了完全正确,我想说这些字母解析为一个表达式,当由 Python 解释器计算时,会生成一个函数。但这太啰嗦了,所以我们通常会跳过中间人,只说 lambda是一个函数。
将表达式分配给变量是没有意义的。如果我写x = 1 + 1,我不会将表达式 1 + 1分配给变量。我将计算一加一的结果分配给该变量。另一方面,如果我写x = lambda: 2,那么我实际上是将一个函数分配给变量x。函数在运行时存在;表达式纯粹是一个解析结构。