附加和分离命名空间以保持全局的干净
attach的Python项目详细描述
连接
您可以使用pip install attach
安装这个python包。
这是怎么工作的?
下面是一个示例会话:
>>> from attach import Namespace, attach
>>>
>>> foo = Namespace()
>>> with attach(foo):
... bar = 'bar'
... baz = 'baz'
...
>>>
>>> bar
Traceback (most recent call last):
...
NameError: name 'bar' is not defined
注意,由于在{{CD3>}上下文中定义了{{CD2>},^ {< CD2>}不存在为全局的。
相反,它的值被保存到名称空间foo
:
>>> foo.bar
'bar'
我们可以稍后重新附加命名空间:
>>> with attach(foo):
... print(bar)
...
bar
有什么意义?
这个模块在jupyter笔记本中特别有用。很多时候, 我们有这样的结构:
X = np.array([1, 2, 3])
def increment(X):
return X + 1
换句话说,我们有全局参数和函数参数或同名的局部变量。 但是,这可能会导致在输入错误的情况下出现意外引用, 或者很难把所有东西都模块化。
通过使变量不在全局变量和名称空间内,您可以强制函数仅 使用已显式传入的变量,从而防止许多棘手的错误!
黑客入侵地球是不是邪恶的?
是的,有充分的理由,但这并不意味着用于代码文件或生产中,而是用于探索性的jupyter笔记本。
这是什么Namespace
类?
您可以将任何类似字典的对象传递到attach()
;它没有实例
这个包中定义的Namespace
类的。
Namespace
类只有一些细节,比如一个很好的字符串表示,并且
允许您同时将属性设置为foo.bar
和foo['bar']
。
你应该知道的内容
默认情况下,以下划线开头的变量不会保存到命名空间中;它们会丢失。 要更改此行为,请在
attach()
中设置skip_underscored=False
。attach()
只关注全局变量。如果你在函数中调用它, 小心意外的行为。
待办事项
- 将
read_only
参数添加到attach()
,这将启用在 Need时嵌套方式。 - 检查是否在函数内部调用,除非
read_only=True
,否则出错。 因为我们不能修改函数局部变量,所以只能修改全局变量。