Skip to content

Commit a284cfe

Browse files
committed
add partial
1 parent 7343fa6 commit a284cfe

1 file changed

Lines changed: 87 additions & 0 deletions

File tree

Functional/partial.md

Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
# partial 函数
2+
3+
Python 提供了一个 functools 的模块,该模块为高阶函数提供支持,partial 就是其中的一个函数,该函数的形式如下:
4+
5+
```python
6+
functools.partial(func[,*args][, **kwargs])
7+
```
8+
9+
这里先举个例子,看看它是怎么用的。
10+
11+
假设有如下函数:
12+
13+
```python
14+
def multiply(x, y):
15+
return x * y
16+
```
17+
18+
现在,我们想返回某个数的双倍,即:
19+
20+
```
21+
>>> multiply(3, y=2)
22+
6
23+
>>> multiply(4, y=2)
24+
8
25+
>>> multiply(5, y=2)
26+
10
27+
```
28+
29+
上面的调用有点繁琐,每次都要传入 `y=2`,我们想到可以定义一个新的函数,把 `y=2` 作为默认值,即:
30+
31+
```python
32+
def double(x, y=2):
33+
return multiply(x, y)
34+
```
35+
36+
现在,我们可以这样调用了:
37+
38+
```
39+
>>> double(3)
40+
6
41+
>>> double(4)
42+
8
43+
>>> double(5)
44+
10
45+
```
46+
47+
事实上,我们可以不用自己定义 `double`,利用 `partial`,我们可以这样:
48+
49+
```python
50+
from functools import partial
51+
52+
double = partial(multiply, y=2)
53+
```
54+
55+
`partial` 接收函数 `multiply` 作为参数,固定 `multiply` 的参数 `y=2`,并返回一个新的函数给 `double`,这跟我们自己定义 `double` 函数的效果是一样的。
56+
57+
所以,简单而言,`partial` 函数的功能就是:把一个函数的某些参数给固定住,返回一个新的函数。
58+
59+
需要注意的是,我们上面是固定了 `multiply` 的关键字参数 `y=2`,如果直接使用:
60+
61+
```python
62+
double = partial(multiply, 2)
63+
```
64+
65+
`2` 是赋给了 `multiply` 最左边的参数 `x`,不信?我们可以验证一下:
66+
67+
```python
68+
from functools import partial
69+
70+
def subtraction(x, y):
71+
return x - y
72+
73+
f = partial(subtraction, 4) # 4 赋给了 x
74+
>>> f(10) # 4 - 10
75+
-6
76+
```
77+
78+
# 小结
79+
80+
- partial 的功能:固定函数参数,返回一个新的函数。
81+
- 当函数参数太多,需要固定某些参数时,可以使用 `functools.partial` 创建一个新的函数。
82+
83+
# 参考资料
84+
85+
- [偏函数 - 廖雪峰的官方网站](http://www.liaoxuefeng.com/wiki/001374738125095c955c1e6d8bb493182103fac9270762a000/001386819893624a7edc0e3e3df4d5d852a352b037c93ec000)
86+
87+

0 commit comments

Comments
 (0)