根据这个问题的已接受答案,我理解我不能创建纯全局变量。好的,很酷。
然而,他接着说:
引用: [..]你所能做的就是在特定范围内创建一个变量。(如果你在Python解释器中创建一个变量,然后导入其他模块,你的变量就在最外层的范围内,因此在你的Python会话中是全局的。[..]
好的,所以我们不能按原始意义分配全局变量,但似乎可以通过
然后,显然,在我的尝试中访问通过命令行参数传递给我的Python程序的变量时,我错过了一些至关重要的东西。
我的程序有通常的
我的包的布局如下:
这是
然而,他接着说:
引用: [..]你所能做的就是在特定范围内创建一个变量。(如果你在Python解释器中创建一个变量,然后导入其他模块,你的变量就在最外层的范围内,因此在你的Python会话中是全局的。[..]
好的,所以我们不能按原始意义分配全局变量,但似乎可以通过
global
关键字从包内部访问最外层作用域中的变量,对吗?然后,显然,在我的尝试中访问通过命令行参数传递给我的Python程序的变量时,我错过了一些至关重要的东西。
我的程序有通常的
__main__.py
,它处理参数解析并执行来自我的Python模块backend
的代码。
backend
的代码依赖于通过命令行参数输入的内容。然而,我似乎无法使这些参数对backend
可用。我的包的布局如下:
mypackage
- __main__.py
- backend/
-__init__.py
-direction.py
这是
__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
我的backend/direction.py
文件:
global target_dir
print(target_dir)
运行此代码会引发一个 NameError: 'target_dir' is not defined
错误。那么问题出在哪里呢?
我是假设了一种不可能的情况,还是在声明上出了错?
import
该模块才能访问该变量。 - thefourtheyedirection.py
中导入__main__
吗?这听起来不太好,也不像应该做的事情(?)。使用文件作为变量的解决方法可接受吗? - deepbrooktarget_dir
传递给实际需要它的任何函数。如果有很多函数需要用到它,考虑使用一个类。 - Daniel Rosemanglobal
关键字困扰住了。target_dir
被传递给几乎所有的函数,所以我想绕过为每个调用输入它的麻烦 - 但是我看到这里的建议和答案清楚地说明了为什么对于这个任务来说global
是无意义的。 - deepbrook