gpt4 book ai didi

python:使用字符串输入的调度方法

转载 作者:太空宇宙 更新时间:2023-11-03 13:38:12 25 4
gpt4 key购买 nike

我需要编写一个接受 3 个参数的方法:

  1. 一个带有函数名称的字符串
  2. 该函数参数的有序列表。这包括具有默认值的参数和 *varargs,但不包括 **kwargs
  3. 一个 dict 表示任何额外的关键字参数,如果没有则为 None

我需要使用这个输入来检索一个函数并调用它。例如:

def dispatch(name, args, kwargs=None):
do_magic_here(name, args, kwargs)

def meth1():
print "meth1"

def meth2(a, b):
print "meth2: %s %s" % (a, b)

def meth3(a, **kwargs):
print "meth3: " + a
for k,v in kwargs.iteritems():
print "%s: %s" % (k,v)

我需要能够这样调用:

>>> dispatch("meth1", [])
meth1
>>> dispatch("meth2", [1, 3])
meth2: 1 3
>>> dispatch("meth3", [1], {"hello":2, "there":3})
meth3: 1
hello: 2
there: 3

我可以这样做:

def do_magic_here(name, args, kwargs=None):
if name=="meth1":
meth1()
if name=="meth2":
meth2(args[0], args[1])
if name=="meth3":
meth3(args[0], **kwargs)

但我正在尝试分派(dispatch)大约 40 个方法,而且这个数字可能会增加,所以我希望有一种更编程的方法来完成它。我正在用 getattr 查看一些东西,但我不太明白。

最佳答案

我会用

def dispatch(name, *args, **kwargs):
func_name_dict[name](*args, **kwargs)

func_name_dict = {'meth1':meth1,
'meth2':meth2,
...}

允许您更自然、更透明地传递 argskwargs:

>>> dispatch("meth2", 1, 3)
meth2: 1 3

您当然可以使用 globals()locals() 代替字典,但您可能需要注意每个命名空间中的哪些函数或者不想暴露给调用者

关于python:使用字符串输入的调度方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36270322/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com