我正在编写一个输出列表的程序。假设此列表可以包含数百个项目。我想使用argparse传递一个选项,以显示输出中显示了多少个项目,默认为15行。如何获得在函数中作为变量传递的选项?
def get_args(argv = None):
parser = argparse.ArgumentParser()
parser.add_argument(
# ...omitted code for other options
parser.add_argument(
'-n',
'--noutput',
default = 15,
type = int,
help = 'Number of lines in output'
)
return parser.parse_args(argv)
def scramble_words():
"""
Shuffle words in new_list
Print reordered words by newline
"""
random.shuffle(new_list)
print( )
print("\n\n".join(new_list[:--noutput]))
答案 0 :(得分:2)
另一种选择是使用Click包来创建命令行选项。我个人觉得它更直观。
import click
@click.command()
@click.option('-n', '--noutput')
def driver(noutput):
print(noutput)
def scramble_words(noutput):
"""
Shuffle words in new_list
Print reordered words by newline
"""
new_list=['a', 'b', 'c', 'd', 'e']
random.shuffle(new_list)
print( )
print("\n\n".join(new_list[:--noutput]))
if __name__ == "__main__":
driver()
如果您要坚持使用argparse,可以通过以下方法将参数传递给函数。我对您可能如何使用代码进行了一些假设。
import sys
import argparse
import random
def get_args(argv = None):
parser = argparse.ArgumentParser()
parser.add_argument(
'-n',
'--noutput',
default = 15,
type = int,
help = 'Number of lines in output'
)
return parser.parse_args()
def scramble_words(noutput):
"""
Shuffle words in new_list
Print reordered words by newline
"""
new_list=['a', 'b', 'c', 'd', 'e']
random.shuffle(new_list)
print( )
print("\n\n".join(new_list[:--noutput]))
if __name__ == "__main__":
args = get_args(sys.argv)
scramble_words(args.noutput)
答案 1 :(得分:1)
您没有显示如何调用这两个函数,而是类似
def scramble_words(lst, n=15):
"""
Shuffle words in lst
Print n reordered words by newline
"""
random.shuffle(lst)
print()
print("\n\n".join(lst[:n]))
# ...
args = get_args()
scramble_words(new_list, args.noutput)
更好的设计是让呼叫者进行打印,并且可能只在单词之间打印一条换行符。