Скажем, вы пишете скрипт, который хотите иметь возможность напрямую выполнять из командной строки или импортировать функции в другое место.Как исполняемый файл командной строки, вы можете передать флаги в качестве параметров.Если вы импортируете скрипт позже, может быть утомительно делать каждую опцию параметром в каждой функции.Ниже у меня есть сценарий, который, я надеюсь, иллюстрирует мою точку зрения с использованием параметра многословия.
#!/usr/bin/python
def getArgs():
parser = argparse.ArgumentParser()
parser.add_argument('input',type=int)
parser.add_argument('-v','--verbose',action='store_true')
return parser.parse_args()
def main(input,verbose):
result = calculation(input,verbose)
if verbose:
print(str(input) + " squared is " + str(result))
else:
print(result)
def calculation(input,verbose):
if verbose:
print("Doing Calculation")
result = input * input
return result
if __name__ == '__main__': #checks to see if this script is being executed directly, will not run if imported into another script
import argparse
args=getArgs()
if args.verbose:
print("You have enabled verbosity")
main(args.input,args.verbose)
Вот несколько иллюстративных вариантов выполнения
user@machine ~ $ ./whatever.py 7
49
user@machine ~ $ ./whatever.py -v 7
You have enabled verbosity
Doing Calculation
7 squared is 49
user@machine ~ $ python
Python 3.7.3 (default, Mar 26 2019, 21:43:19)
[GCC 8.2.1 20181127] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> import whatever
>>> whatever.main(7,False)
49
>>> whatever.main(7,True)
Doing Calculation
7 squared is 49
Этот сценарий работает, но я считаю, что есть более чистый способдля обработки параметров командной строки в случае, если вы импортируете сценарий позже, например, при принудительном использовании параметра по умолчанию.Я полагаю, что одним из вариантов было бы рассматривать параметр как глобальную переменную, но я все еще подозреваю, что есть менее подробный (каламбур) способ включить эти параметры в более поздние функции.