Python functools.partial()


一、问题

减少调用函数时的参数个数。



二、解决方案

functools.partial() 函数允许给一个或多个参数设置固定的值,减少被调用是的参数个数。

def test(a, b, c, d):
    print(a, b, c, d)

from functools import partial
s1 = partial(test, 1)
s1(2, 3, 4)

s2 = partial(test, d=4)
s2(1, 2, 3)

s3 = partial(test, 1, 2, d=4)
s3(3)

输出:

1 2 3 4
1 2 3 4
1 2 3 4

partial 固定参数值返回一个新的函数,新函数接受未赋值的参数,最后将所有参数传递给原函数。



三、讨论

实例:计算两点间距离。

import numpy as np
from functools import partial

points = [(1, 2), (3, 4), (5, 6), (7, 8)]

def distance(p1, p2):
    x1, y1 = p1
    x2, y2 = p2
    return np.hypot(x2-x1, y2-y1)

以某个点为基点,根据点与基点的距离排序。

sort()只接受一个参数,而distance()需要两个参数,所以用partial()来解决。

(sorted()cmp接受两个参数,用key接受一个参数。)

basepoint = (4, 3)
points.sort(key=partial(distance, basepoint))
print(results)

输出:

[(3, 4), (1, 2), (5, 6), (7, 8)]


posted @ 2019-03-07 09:21  做梦当财神  阅读(458)  评论(0)    收藏  举报