【发布时间】:2018-07-12 07:33:33
【问题描述】:
我想在我的 Python3 代码中创建函数,利用运行时提供的数据。我一直坚持如何编写一个函数
def foo(varname1, varname2):
return varname1 + varname2
其中给出参数名称的字符串varname1 和varname2 被指定为某些构造函数的参数,例如:
def makeNewFooFunc(varname1, varname2):
# do magic
return foo
fooFunc = makeNewFooFunc('first', 'second')
print(fooFunc(first=1, second=2))
# should return 3
#do magic 步骤是什么?这是eval 的工作,还是有其他选择?
【问题讨论】:
-
为什么参数名称很重要?在我看来,您可以只使用
**kwargs,而无需使用该特定签名“生成函数”。 -
@deceze 在处理询问函数并使用字典传递参数的外部代码时,重要的是参数名称,而不是它们的位置。
-
外部代码正在检查函数签名并相应地改变其行为?
-
@deceze 不确定。我正在使用 Flask-Restful,需要资源类具有 get、post 等方法,其参数名称与资源 url 中的变量名称匹配。
-
所以它可能只是在做
your_function(**params),这意味着def your_function(**kwargs)应该可以正常工作。另外,为什么你不能简单地手动编写这些函数签名呢?大概这些函数中的每一个都是独一无二的,那么为什么需要生成它们呢?
标签: python python-3.x metaprogramming