将可选的控制台参数传递给 python 中的函数

Passing optional console arguments to function in python

我正在编写一个从控制台获取三个可选参数的函数。

def FizzBuzz(target_number=100, fizz=3, buzz=5):
    
    for i in range(target_number):
        output = "" #This is what the function will return
        if i % fizz == 0: #If a multiple of Fizz, add "Fizz" to output
            output += "Fizz"
        if i % buzz == 0: #If a multiple of Buzz, add "Buzz" to output
            output += "Buzz"
        if output == "": #If neither Fizz nor Buzz is in the output, print number instead
            output += str(i)
        print(output)

我知道了运行sys.argv:

if len(sys.argv) == 2:
    FizzBuzz(int(sys.argv[1]))
elif len(sys.argv) == 3:
    FizzBuzz(int(sys.argv[1]), int(sys.argv[2]))
else:
    FizzBuzz(int(sys.argv[1]), int(sys.argv[2]), int(sys.argv[3]))

这种方法既乏味又无效。有更简单的方法吗?

查看 argparse 模块:

import argparse

parser = argparse.ArgumentParser(description='FizzBuzz')
parser.add_argument('--target', type=int, default=100,
                    help='Target number (default: 100)')
parser.add_argument('--fizz', type=int, default=3, 
                    help="Multiples of this argument will output 'Fizz' (default: 3)")
parser.add_argument('--buzz', type=int, default=5, 
                    help="Multiples of this argument will output 'Buzz' (default: 5)")


if __name__ == "__main__":
    args = parser.parse_args()
    FizzBuzz(args.target, args.fizz, args.buzz)

sys.argv[1:] 的每个元素转换为整数的一个优点是每个参数都是真正可选的 - 您可以只传递 --buzz 7 以使用 7 作为最后一个参数和默认值其他人

这是一个可能的解决方案:

FizzBuzz(*map(int, sys.argv[1:]))