附加和分离命名空间以保持全局的干净

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.barfoo['bar']

你应该知道的内容

  • 默认情况下,以下划线开头的变量不会保存到命名空间中;它们会丢失。 要更改此行为,请在attach()中设置skip_underscored=False

  • attach()只关注全局变量。如果你在函数中调用它, 小心意外的行为。

待办事项

  • read_only参数添加到attach(),这将启用在 Need时嵌套方式。
  • 检查是否在函数内部调用,除非read_only=True,否则出错。 因为我们不能修改函数局部变量,所以只能修改全局变量。

欢迎加入QQ群-->: 979659372 Python中文网_新手群

推荐PyPI第三方库


热门话题
java是导入组织。阿帕奇。oro无法解决   java如何同步多个线程访问一些公共数据   java TableModel在第二次单击“其他”复选框后更改jcheckbox单元格的值   java如何在ApacheFlink中连接两个流?   java NSSM服务不显示GUI   java扫描器+交换机的使用   java切换已被抑制的后台进程的标准输出(unix)   带字符串参数的构造函数Java constructor   使用MockRestServiceServer测试HttpRequestExecutingMessageHandler   java使用哪种数据结构来获得所需的结果   java LibGDX定心正交照相机   Java在计算表达式时的自动类型转换   XPath中的java工厂模式   java通知不显示在屏幕上,并且不存在错误   使用Hibernate和MySQL处理upsert的java优雅方式   Java 11中的CLI命令:运行类与运行模块   Java Web Start和allpermissions   swing Java JTable禁用单单元格选择边框高亮显示   使用secp256r1曲线(BouncyCastle)生成java ECDSA签名,给出长度为127的签名