Python 3.x 使用python3中的字典调用包含参数的函数

Python 3.x 使用python3中的字典调用包含参数的函数,python-3.x,function,dictionary,arguments,Python 3.x,Function,Dictionary,Arguments,我一直在逐步改进调用函数的方法,包括字典中保存的参数列表。我的问题是,参数是命令行参数,函数的参数数量不同。如果我调用了一个有2个参数的函数,但字典也有一个有3个参数的函数,那么我将在字典中得到一个“indexer-ror:list-index-out-range”条目。目前我的代码是 !/usr/bin/env python 我在linux系统上,所以如果我执行 ./program.py f1 10 11 它确实给出了预期的结果,但是抛出了提到f2的字典条目。我可以将函数和参数的字典条目转换为

我一直在逐步改进调用函数的方法,包括字典中保存的参数列表。我的问题是,参数是命令行参数,函数的参数数量不同。如果我调用了一个有2个参数的函数,但字典也有一个有3个参数的函数,那么我将在字典中得到一个“indexer-ror:list-index-out-range”条目。目前我的代码是

!/usr/bin/env python 我在linux系统上,所以如果我执行 ./program.py f1 10 11

它确实给出了预期的结果,但是抛出了提到f2的字典条目。我可以将函数和参数的字典条目转换为字符串并使用eval,但这显然是不安全的,但它确实消除了错误。因此我推测python将字典条目解释为命令并抛出错误。从上面的代码中,有没有人有办法解决这个问题?

当您的代码执行时,首先它正在构建您的字典,在那里您可以看到所有函数都被调用,因为我可以假设这不是您预期的行为,您希望基于行参数调用函数,因此,您不应在字典中调用函数,而应在检查第二行参数后调用:

 option ={
     'f1': (func1, slice(2, 4)),
     'f2': (func2, slice(2, 5)),
     'f3': (func3, slice(2, 3))
 }

if len(argv) > 1 and argv[1] in options:
    my_function, slice_argv = options[argv[1]][0]
    my_function(*argv[slice_argv])
如果您确信将为所需函数提供正确数量的行参数,则可以使用:

 option ={
     'f1': func1,
     'f2': func2,
     'f3': func3
 }

if len(argv) > 1 and argv[1] in options:
    my_function[argv[1]](*argv[2:])

谢谢你的答复。作为python新手(但不是编程新手),我花了几秒钟才理解它是如何工作的。在我的例子中,每个函数都有一个已知且固定数量的参数,因此引用的第二个选项是我的实例中的一个选项,并且可以处理。第一个选择我仍在努力想办法,但没有什么是一些实验不能帮助的;)。要是我知道怎么标记这个就好了
 option ={
     'f1': func1,
     'f2': func2,
     'f3': func3
 }

if len(argv) > 1 and argv[1] in options:
    my_function[argv[1]](*argv[2:])