Python 模块范围

标签 python module scope

假设我有一个 Python 模块,名为 foo ,它有一个函数 bar()以及模块内的全局变量 x = 'spam'bar()使用这个x来操作。

如果我导入foo喜欢 import foo ,然后调用foo.bar() ,很明显会发生什么。

但是如果我导入 bar()就这样:from foo import bar ,我打电话 bar() ,如果我还有一个变量 x 会发生什么在我的全局命名空间中?

foo.py

x = 'spam'
def bar():
    print x

main.py

from foo import bar
x = 'eggs'
bar()

如果我将导入行替换为: from foo import bar, x 会怎样? ?

编辑:(在这两种情况下都会打印“垃圾邮件”,问题是为什么?)

最佳答案

函数是在创建时保留有关自身的各种信息的对象。 检查 bar.__module__bar.__globals__ 的值,你就会清楚它是如何工作的。

关于Python 模块范围,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21999871/

相关文章:

使用嵌套列表索引时 Pythonic 交换导致索引错误

python - 为什么这个简单的条件表达式不起作用?

python - 解释器何时释放模块作用域变量引用?

JavaScript 变量作用域 - 持久状态?

javascript - 如何制作返回其内部函数值的函数?

python - 理解 python try catch else finally 子句行为

python - 为什么 css 样式不适用于 GtkButton?

javascript - 无法在 React 组件中导入 ES6 模块

Ruby 模块可以访问它所需要的类方法吗?

C++ 指向函数返回时超出范围的对象的指针 - 为什么这样做有效?