gpt4 book ai didi

python - 在运行时创建的方法中设置参数名称和默认值

转载 作者:行者123 更新时间:2023-11-28 18:54:31 25 4
gpt4 key购买 nike

我需要给一个自动构造的方法定位参数和默认参数。如果我不关心参数名称或默认值,我会让方法采用 *args 和 **kwargs。这是我正在尝试做的一个例子(注意

def make_method(params):
# Create method that's parameters are defined in params.
return method

params = {'param1': 'default_value', 'param2': None}
method = make_method(params)

对于每个非 None 值,我想在方法中创建一个位置参数,对于每个 None 值,我想创建一个默认参数。

问题是我不知道如何在运行时设置参数名称和默认值。我不想将 *args 和 **kwars 用于方法,因为在使用 help() 等时最好使签名正确。我有什么办法可以做到这一点吗?

最佳答案

这是一个 HACK!此外,我不确定我是否理解如何根据您的要求生成 kwargs。但这是一个开始。虽然,我不确定这是否是一个好的开始 :)

def make_method(params):
def impl(*args, **kwargs):
# do stuff with args & kwargs
print "I was called with {args} and {kwargs}".format(
args=args,
kwargs=kwargs)
pass
name = 'some_name'
scope = dict(__impl=impl)
exec """\
def {name}({pos_arg_defs}):
'Very helpful function.'
return __impl({pos_arg_names})
""".format(name=name,
pos_arg_defs=', '.join('='.join((k, repr(v)))
for k, v in params.iteritems()
if v is not None),
pos_arg_names=', '.join(k
for k, v in params.iteritems()
if v is not None)) in scope
return scope[name]

这是一些 REPL 输出:

>>> help(make_method(dict(foo=42, bar=None, zomg='abc')))Help on function some_name:some_name(zomg='abc', foo=42)    Very helpful function.

关于python - 在运行时创建的方法中设置参数名称和默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/5560051/

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