在 Python 中,值可以通过三种方式进入作用域:它们作为参数传入,它们可以从封闭作用域访问,最后封闭类和封闭函数的第一个参数可用于super()
. 为什么不向开发人员公开这种机制,以便可以将其扩展到其他情况呢?
__context__
ChainMap
有一个随处可用的东西,它会暴露东西不是更干净吗?默认情况下,输入类的定义会将类本身暴露在其中__context__['__class__']
,输入非静态、非类成员函数会将第一个参数暴露为__context__['self']
. 但是,一般来说,我们可以用类似的构造做更多的事情
entercontext {'blah': 123}:
f(__context__['blah'])
这会将 dict 推送到 ChainMap 并在退出范围时弹出它。
然后可以使用它来实现许多其他设置情况,例如 numpy set_printoptions
/get_printoptions
等。您只需将它们推送到上下文中,而不是获取、设置和恢复。