python - 从 Python 中的字典中给函数默认参数

标签 python

假设我有一个字典:

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/

相关文章:

python - 立即在所有列上运行 sklearn labelencoder

python - "IndexError: list index out of range"与 elif 语句

python - cobbler 规范文件中的 %{__python} 百分号大括号变量

Python - 忽略列表中的字符串不起作用

python - 将文件复制到现有目录会导致 IOError [错误 21] 是一个目录

python - 在 Django 应用程序中存储键/值数据的位置

python - 如何获取更新时的最后一行 ID?

python - 使用 nltk 提取单词

python - Python for循环中发生的内部操作

python - 从函数返回表达式之和的 Python 方式是什么?