usu*_* me 26 python partial-application
所以我想了解partial:
import functools
def f(x,y) :
print x+y
g0 = functools.partial( f, 3 )
g0(1)
4 # Works as expected
Run Code Online (Sandbox Code Playgroud)
在:
g1 = functools.partial( f, y=3 )
g1(1)
4 # Works as expected
Run Code Online (Sandbox Code Playgroud)
在:
g2 = functools.partial( f, x=3 )
g2(1)
TypeError: f() got multiple values for keyword argument 'x'
Run Code Online (Sandbox Code Playgroud)
TypeError如果我y用作关键字参数,则消失:
在:
g2( y=1 )
4
Run Code Online (Sandbox Code Playgroud)
是什么导致的TypeError?
Mar*_*ers 34
这与functools.partial真的无关.你本质上是这样调用你的函数:
f(1, x=3)
Run Code Online (Sandbox Code Playgroud)
Python首先完成位置参数,你的第一个参数是x.然后应用关键字参数,并再次提供x.
functools.partial()没有办法检测到你已经提供了第一个位置参数作为关键字参数.它不会通过用y=关键字参数替换位置参数来扩充您的调用.
混合位置和关键字参数时,必须注意不要两次使用相同的参数.
| 归档时间: |
|
| 查看次数: |
6371 次 |
| 最近记录: |