【问题标题】:Python Import Star Creating Hidden Namespace?Python Import Star 创建隐藏命名空间?
【发布时间】:2016-02-27 12:37:29
【问题描述】:

我最近遇到了一些不寻常的行为。

foo.py

a = 0
def bar():
    print (a)

控制台:

>>> import foo
>>> foo.bar()
0
>>> foo.a = 10
>>> foo.bar()
10

控制台:

>>> from foo import *
>>> bar()
0
>>> a
0
>>> a = 10
>>> a
10
>>> bar()
0

我推断import * 实际上是在创建a 的两个副本——一个在全局命名空间中,一个在foo 模块中,无法访问。这种行为是否在任何地方进行了解释/记录?我不知道要搜索什么。

这似乎是import * 的一个显着且出乎意料的后果,但出于某种原因,我以前从未见过它。

【问题讨论】:

标签: python import scope


【解决方案1】:

在 Python 中没有隐藏命名空间之类的东西,所描述的行为是正常的和预期的行为。

您应该阅读https://docs.python.org/3/tutorial/modules.html#more-on-modules 以更好地了解全局变量是如何工作的。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2023-03-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多