python - 在 Python 中更改函数的关键字默认值

标签 python keyword-argument

假设我有这样一个函数:

def func_1(a, b=1, c=None):
     code here

现在我想创建另一个具有相同内部结构但关键字参数不同的函数。

def func_2(a, b=2, c='asdf'):
    code here

一个选项是这样的闭包:

 def make_func(b, c):
     def func(a, b=b, c=c):
         code here
     return func

 func_1 = make_func(1, None)
 func_2 = make_func(2, 'asdf')

是否有更简洁/Pythonic 的方式来解决这个问题?

最佳答案

使用 functools.partial() object :

from functools import partial

func_2 = partial(func_1, b=2, c='asdf')

提供给部分的默认值可以在调用时再次覆盖:

>>> from functools import partial
>>> def func_1(a, b=1, c=None):
...     return a, b, c
...
>>> func_2 = partial(func_1, b=2, c='asdf')
>>> func_2(42)
(42, 2, 'asdf')
>>> func_2(42, b=5, c='spam')
(42, 5, 'spam')

关于python - 在 Python 中更改函数的关键字默认值,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36023611/

相关文章:

python - 执行子函数的主函数

python - Tkinter-SyntaxError : non-keyword arg after keyword arg

ruby - 如何从 C 扩展将关键字传递到 Ruby 方法?

c++ - python 类定义与 C++ 类定义

python - 使用 if else 在 dict 中使用 Python 将值设置为键

python - 尝试在 Python 服务器上使用 SSLContext 对象包装套接字时遇到问题

python - xmlsec 的构建轮失败 - mac

Python:我想做一个连续命名文件的截图脚本

python-3.x - 在哪里可以找到 PyQt5 方法签名?

ruby - 将散列传递给接受关键字参数的函数