Accessing a variable from outer scope via global keyword in Python
根据这个问题的公认答案,我理解我不能创建纯粹的全局变量。好吧,酷。
然而,他接着说:
[..]all you can do is make a variable in a particular scope. (If you make a variable inside the Python interpreter, and then import other modules, your variable is in the outermost scope and thus global within your Python session.[..]
好吧,所以我们不能在最初的意义上分配全局变量,但似乎可以通过
很明显,在访问通过命令行参数传递给python程序的变量的过程中,我遗漏了一些关键的东西。
我的程序有一个常见的
我的包的布局是:
1 2 3 4 5 | mypackage - __main__.py - backend/ -__init__.py -direction.py |
这是
1 2 3 4 5 6 7 8 9 10 11 12 | 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 |
还有我的
1 2 | global target_dir print(target_dir) |
运行这个程序会产生一个
在python 3中,还有一个
全球的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 | 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 |
非局部的
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 | 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 |
我不清楚你的问题到底是什么。是否无法执行以下操作?
1 2 3 4 5 | import backend if __name__ =="__main__": # parse arguments backend.argreceive(arguments) |
正如Daniel Roseman所建议的,如果有许多后端函数需要访问这些变量,那么您应该考虑使用类和类属性来存储变量。
1 2 3 | class argreceive(): def __init__(self,args): self.args = args |