访问"模块范围"变量

Fro*_*y Z 19 python variables scope coding-style module

我目前正在学习Python,我必须从事Python 2.7项目.

在模块本身的功能中访问"模块范围"变量对我来说有点混乱,我没有成功找到令人满意的方式.

到目前为止我的尝试:

方式1:

my_module.py

my_global_var = None

def my_func():
    global my_global_var
    my_global_var = 'something_else'
Run Code Online (Sandbox Code Playgroud)

在这里,我认为混淆本地和"模块范围"变量可能非常容易.

方式2:

my_module.py

import my_module

my_global_var = None

def my_func():
    my_module.my_global_var = 'something_else'
Run Code Online (Sandbox Code Playgroud)

在这里,必要时,"my_module"的名称不能像"方式1"那样容易地改变.另外,将模块导入自身听起来很奇怪.

你会推荐什么?或者你会推荐别的吗?谢谢.

zee*_*kay 25

您可能想要阅读Python的命名空间.方式1是正确的但通常是不必要的,从不使用2.更简单的方法是使用dict(或类或其他对象):

my_globals = {'var': None}

def my_func():
    my_globals['var'] = 'something else'
Run Code Online (Sandbox Code Playgroud)

赋值始终进入最内层范围,始终首先搜索最内层范围,因此需要global关键字.在这种情况下,您没有分配名称,因此没有必要.

  • 啊.因此可以在函数范围中修改dict值,但不能修改原始字符串值.Python在这里看起来很反直觉.无论如何,这适用于我的需要.谢谢 (3认同)
  • @FrostyZ您可以在不使用global关键字的情况下修改任何可变对象. (3认同)