繁体   English   中英

使用数组切片调度具有可变数量 arguments 的 Python 方法调用

[英]Dispatch a Python method call with variable number of arguments by using an array slice

我有一个小的 Python 跟踪脚本,它有几种可能的模式(例如“添加”和“显示”),它们对应于采用不同数量的 arguments 的方法。

我想检查 mode 参数是否有效,如果是,则调用适当的方法,并将所有剩余的命令行 arguments 作为单独的参数传递。

我的代码如下所示:

"""python tracking.py add <person> <date> <score> 
   python tracking.py show <person> <date>
"""
if __name__ == "__main__":
    tracking = TrackingData()
    modes = {'add': tracking.add_data, 'show': tracking.print_data }

    mode = sys.argv[1]

    # If mode is valid
    modes[mode](sys.argv[2:])

    # Original code looks a bit like this: 
    #
    # person = sys.argv[2]
    # date = sys.argv[3]
    # score = sys.argv[4]

    # tracking.add_data(person, date, score)
    # tracking.print_data(person, date)

但是,代码给出了一个TypeError: print_data() missing 1 required positional argument: 'date' - 所以大概数组切片是作为单个参数传递的,而我需要将它展平到它的组件条目中。

最好的方法是什么? 这种类型的调度表/模态动作方法有更好的模式吗?

使用*会将列表中的值解包到位置 arguments 中。 因此,您只需将调度线更改为如下所示:

modes[mode](*sys.argv[2:])

例如:

def add3(a, b, c):
    return a + b + c

nums = [1, 2, 3]

add3(*nums) # 6

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM