Skip to Content
流畅的Python(第2版)
book

流畅的Python(第2版)

by Luciano Ramalho
April 2023
Intermediate to advanced
769 pages
25h 16m
Chinese
Posts & Telecom Press
Content preview from 流畅的Python(第2版)
with
match
else
527
# (set! n (+ n 1))
case ['set!', Symbol(name), value_exp]:
env.change(name, evaluate(value_exp, env))
匹配对象:
一个列表,以
'set!'
开头,后跟一个
Symbol
和一个表达式。
操作结果:
使用表达式的求值结果更新
env
name
的值。
Environment.change
方法从局部环境到全局环境依序遍历,把找到的第一个
name
更新为新
值。如果不是为了实现
'set!'
关键字,
那么在这个解释器中,使用
Environment
类型的地
方都可以使用
Python
ChainMap
Python
nonlocal
Scheme
set!
解决同样的问题
set!
形式与
Python
中的
nonlocal
关键字作用类似:声明
nonlocal x
之后,可以使
x = 10
更新局部作用域外部定义的
x
变量。在
Python
中,如未声明
nonlocal x
x = 10
始终创建一个局部变量(详见
9.7
)。
类似地,
(set! x 10)
更新可能在函数局部环境外部定义的
x
。相比之下,
(define x
10)
中的
x
始终是局部变量,在局部环境中创建或更新。
nonlocal
(set! ...)
都是为了更新闭包中变量存储的程序状态。示例
9-13
使用
nonlocal
实现一个计算累计平均值的函数,在闭包中存储
count
total
。下面使用
lis.py
定义的
Scheme ...
Become an O’Reilly member and get unlimited access to this title plus top books and audiobooks from O’Reilly and nearly 200 top publishers, thousands of courses curated by job role, 150+ live events each month,
and much more.
Start your free trial

You might also like

Python高级编程(第2版)

Python高级编程(第2版)

Posts & Telecom Press, Michał Jaworski, Tarek Ziadé
Kafka权威指南(第2版)

Kafka权威指南(第2版)

Gwen Shapira, Todd Palino, Rajini Sivaram, Krit Petty
Python贝叶斯分析(第2版)

Python贝叶斯分析(第2版)

Posts & Telecom Press, Osvaldo Martin

Publisher Resources

ISBN: 9787115612366