我有一组(4 个标志)控制我的 python 脚本生成的输出的性质的标志和控制脚本打印到终端的信息量的标志(verbose
的方式) flag 通常会)。这些标志由多个函数使用。标志的值由我使用 argparse
解析的可选命令行参数设置。
目前,我在使用这些标志的任何函数之外的全局范围内拥有这些标志,而不是将这些标志作为参数传递给函数。像这样:
import argparse
flag1=True
flag2=True
flag3=True
def fun1():
...
if flag1:
..something..
else:
..something else..
#fun1 also uses the other flags in a similar way
...
def fun2():
...
if flag2:
..something..
else:
..something else..
#fun1 also uses the other flags in a similar way
...
def main()
...
args=parser.parse_args()
...
global flag1
flag1=args.flag1
# and so on for the other flags
fun1()
fun2()
根据此处的许多答案(例如 this),我一直认为在 python 中使用全局变量是不好的做法。这也适用于此吗?我有点不愿意将标志作为参数传递,因为我将传递太多变量作为参数。
处理命令行参数设置的标志的最佳方法是什么?
最佳答案
最简单的解决方案是要么将所有标志传递给所有函数(作为单个 args
对象),要么仅根据哪个函数使用哪个标志来传递相关标志。
现在这确实会成为一个负担,特别是对于嵌套的函数调用,您很快就不得不将整个标志从一个函数传递到另一个函数...这里的解决方法是使用一个类,这样您就可以共享方法之间的状态:
class Command(object):
def __init__(self, flags):
self.flags = flags
def fun1(self):
...
if self.flags.flag1:
..something..
else:
..something else..
def fun2(self):
...
if self.flags.flag2:
..something..
else:
..something else..
def run(self):
self.fun1()
self.fun2()
def main()
...
args=parser.parse_args()
cmd = Command(args)
cmd.run()
关于python - 在 python 中使用命令行参数标志的正确方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/34650573/