nls*_*bch 2 python scope global-variables variable-declaration
根据这个问题的接受答案,我理解我无法创建纯全局变量.好的,很酷.
然而,他继续说:
[..]你所能做的只是在特定范围内制作一个变量.(如果在Python解释器中创建变量,然后导入其他模块,则您的变量位于最外层范围内,因此在Python会话中是全局的.[..]
好的,所以我们不能在原始意义上分配全局变量,但似乎可以通过global关键字从包中访问最外层范围内的变量,对吗?
显然,在我通过命令行参数访问传递给我的python程序的变量的努力中,我显然缺少一些关键的东西.
我的程序有通常的__main__.py,它处理参数解析并从我的python模块执行代码backend.
backend具有依赖于通过命令行参数输入的代码.但是,我似乎无法提供这些参数backend.
我的包的布局是:
mypackage
- __main__.py
- backend/
-__init__.py
-direction.py
Run Code Online (Sandbox Code Playgroud)
这是__main__.py:
import argparse
# Setup ArgParser
parser = argparse.ArgumentParser(description="Fancy Description of program.")
parser.add_argument('--tar', nargs=1, dest='target',
help='Specify output folder.',
default=['/path/to/output'])
target_dir = args.target[0]
# Import backend now that our variable is set.
from backend.direction import direction
Run Code Online (Sandbox Code Playgroud)
我的backend/direction.py:
global target_dir
print(target_dir)
Run Code Online (Sandbox Code Playgroud)
运行这个提出了一个NameError: 'target_dir' is not defined.那么大便呢?我在这里假设是不可能的,还是我只是搞砸了声明?
global只有它使用的模块内的工作,也不要使用global来声明在全球范围内(即该模块范围内)的全局变量.您可以global在函数范围内使用,以指示您要在全局范围中使用变量而不是在本地范围中.
在python 3中,还有一个nonlocal关键字,允许您指示要修改外部作用域中不是全局/模块作用域的变量.
全球
A = 1
def global_func():
global A
A = 2
def func():
A = 3
print(A)
# 1
global_func()
print(A)
# 2
func()
print(A)
# 2
Run Code Online (Sandbox Code Playgroud)
外地
def outside():
a = 1
def inside_nonlocal():
nonlocal a
a = 2
def inside():
a = 3
print(a)
# 1
inside_nonlocal()
print(a)
# 2
inside()
print(a)
# 2
Run Code Online (Sandbox Code Playgroud)