File tree Expand file tree Collapse file tree
Expand file tree Collapse file tree Original file line number Diff line number Diff line change 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+
You can’t perform that action at this time.
0 commit comments