[英]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.