假设我有一个字典:
d = {'a': 3, 'b':4}
我想创建一个函数 f 来做与这个函数完全相同的事情:
def f(x, a=d['a'], b=d['b']):
print(x, a, b)
(不一定要打印,但可以用变量做一些事情并直接从他们的名字调用)。
但是我想直接从字典创建这个函数,也就是说,我想要一些看起来像的东西
def f(x, **d=d):
print(x, a, b)
它的行为类似于之前定义的函数。这个想法是我有一个大字典,其中包含我的函数参数的默认值,我不想这样做
def f(a= d['a'], b = d['b'] ...)
我不知道在 python 中是否完全可行。任何见解表示赞赏!
编辑:想法是能够调用 f(5, a=3)
。
Edit2:问题不在于将存储在字典中的参数传递给函数,而是定义一个函数,其参数名称和默认值存储在字典中。
最佳答案
您无法在函数定义时实现这一点,因为 Python 静态地确定函数的范围。虽然,可以编写一个装饰器来添加默认关键字参数。
from functools import wraps
def kwargs_decorator(dict_kwargs):
def wrapper(f):
@wraps(f)
def inner_wrapper(*args, **kwargs):
new_kwargs = {**dict_kwargs, **kwargs}
return f(*args, **new_kwargs)
return inner_wrapper
return wrapper
用法
@kwargs_decorator({'bar': 1})
def foo(**kwargs):
print(kwargs['bar'])
foo() # prints 1
或者,如果您知道变量名称但不知道它们的默认值...
@kwargs_decorator({'bar': 1})
def foo(bar):
print(bar)
foo() # prints 1
警告
以上示例可用于动态生成具有不同默认参数的多个函数。虽然,如果您要为每个函数传递的参数都相同,那么简单地传递参数的 dict
会更简单、更惯用。
关于python - 从 Python 中的字典中给函数默认参数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58173964/