将可选控制台参数传递给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:]))

最新更新