部分:不允许覆盖给定的关键字参数

Jan*_*egg 4 python overriding partial functools

有没有办法禁止在部分中覆盖给定的关键字参数?假设我想创建bar始终a设置为1. 在以下代码中:

from functools import partial

def foo(a, b):
  print(a)
  print(b)

bar = partial(foo, a=1)
bar(b=3) # This is fine and prints 1, 3
bar(a=3, b=3) # This prints 3, 3
Run Code Online (Sandbox Code Playgroud)

您可以愉快地调用bar并设置a3。是否可以创建baroutfoo并确保调用bar(a=3, b=3)会引发错误或静默忽略a=3并继续使用a=1as 在部分中?

Atr*_*rav 5

你真的需要使用部分吗?您通常可以使用较少的参数定义一个新的函数栏。

喜欢:

def bar(a):
  b = 1
  foo(a, b)
Run Code Online (Sandbox Code Playgroud)

这会出错。

或者像:

def bar(a, b=1):
  b = 1 #ignored provided b
  foo(a, b)
Run Code Online (Sandbox Code Playgroud)

这将忽略 b。

编辑:如果您想对这些进行联机,请使用 lambda:例如:bar = lambda a:foo(a,b=1)bar = lambda a,b=1:foo(a,b=1)