Files
Python_CookBook_repo/7.函数/8.让有n个参数的可调用对象以较少的参数被调用.py

32 lines
900 B
Python
Raw Normal View History

2025-09-10 16:12:45 +08:00
import math
from functools import partial
# 假设我们有这样一个函数
def spam(a, b, c, d):
print(a, b, c, d)
if __name__ == '__main__':
# 这个函数的输入参数有一大堆,但是其中几个是固定的,那就有用了
s1 = partial(spam, 1) #固定a=1
s2 = partial(spam, d=2) # 固定d=2
s3 = partial(spam, 3, 3, d=3) # 固定a=3 b=3 d=3
s1(2,3,4)
s2(1,2,3)
s3(1)
# partial返回的是一个被填充了部分参数的函数,参数数量等于被包装的函数的剩余参数个数
# 这个函数可以用来适配一些参数数量受限的复用场景, 比如sorted函数的key参数仅支持单参数函数
points = [(1, 2), (3, 4), (5, 6), (7, 8)]
def dis (p1, p2):
x1, y1 = p1
x2, y2 = p2
return math.hypot(x2-x1, y2-y1)
pt = (4, 3)
s = partial(dis, pt)
print(sorted(points, key=s))