python - 这个 Python 表达式的输出是如何生成的?
问题描述
有人可以解释这个表达式的输出是什么以及它是如何生成的。我知道我可以把它放在 IDLE 中并检查输出,但我想学习如何手动操作。具体来说,想知道print语句是如何一步步执行的。
def f(x):
return lambda y: (x, y(x))
def g(y):
return lambda x: x(y)
print(g(2)(f)(lambda x:x+1))
解决方案
这都是纯函数式代码(除了print
它本身),所以我们可以使用替换来可视化正在发生的事情:
print(g(2)(f)(lambda x:x+1))
# ^^^^
第 1 步:调用g
with 2
, bindingg
的参数y
到2
...
def g(y): # y = 2
return lambda x: x(y)
...给lambda x: x(2)
。
print((lambda x: x(2))(f)(lambda x:x+1))
# ^^^^^^^^^^^^^^^^^^^
第 2 步:使用...调用lambda
函数(从 中返回g
)f
(lambda x: x(2)) # x = f
# ^^^^
...反过来调用f
...2
def f(x): # x = 2
return lambda y: (x, y(x))
...给lambda y: (2, y(2))
:
print((lambda y: (2, y(2)))(lambda x:x+1))
# ^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^^
第 3 步:使用...调用lambda
函数(f
通过 other返回lambda
)lambda x:x+1
(lambda y: (2, y(2)) # y = lambda x:x+1
# ^^^^
... give (2, (lambda x:x+1)(2))
,这反过来又用...调用参数lambda
函数2
lambda x:x+1 # x = 2
...给3
,然后将其合并到外部的结果中lambda
,给(2, 3)
:
print((2, 3))
#^^^^^^^^^^^^
这最终print
是被调用的点,传递一个元组作为参数。
推荐阅读
- angular - 类型 'null' 不能分配给类型 'number'
- elasticsearch - ElasticSearch _search 检索对象数组中的嵌套对象
- javascript - DraftJs : 添加自定义 HTML + CSS 的自定义按钮
- apache-spark - 如何在 Databricks 中配置自定义 Spark 插件?
- flutter - Flutter:使用当前 mp_chart 版本构建错误
- ruby-on-rails - ActiveRecord::StatementInvalid: PG::ConnectionBad: 在迁移过程中连接关闭
- artifactory - 从 Jfrog artifactory 获取缓存在远程存储库中的包列表
- html - CSS Sprite 是否与 SVG 兼容
- python - 使用 opencv-python 时找不到我的相机的 RTSP url
- rocket.chat - Rocketchat 服务器是否有健康端点