未命名作品.jpg


01 偏函数

当函数的参数个数太多,需要简化时,使用functools.partial可以创建一个新的函数,这个新函数可以固定住原函数的部分参数,从而在调用时更简单。

  1. from functools import partial
  2. def func(a1,a2,a3):
  3. print(a1,a2,a3)
  4. new_func1 = partial(func,a1=1,a2=2)
  5. new_func1(a3=3)
  6. new_func2 = partial(func,1,2)
  7. new_func2(3)
  8. new_func3 = partial(func,a1=1)
  9. new_func3(a2=2,a3=3)

注意:partial括号内第一个参数是原函数,其余参数是需要固定的参数
效果图
08-03 偏函数、chain函数 - 图2

02 __add__的使用

如果一个类里面定义了 __add__方法,如果这个类的对象 +另一个对象,会触发这个类的__add__方法,换个说法如果 对象1+对象2 则会触发对象1__add__方法,python在类中有很多类似的方法,对象会在不同情况下出发对应的方法。

  1. class Foo:
  2. def __init__(self):
  3. self.num = 1
  4. def __add__(self, other):
  5. if isinstance(other,Foo):
  6. result = self.num + other.num
  7. else:
  8. result = self.num + other
  9. return result
  10. fo1 = Foo()
  11. fo2 = Foo()
  12. v1 = fo1 + fo2
  13. v2 = fo1 + 4
  14. print(v1,v2)

效果图:
08-03 偏函数、chain函数 - 图3

03 chain函数

chain函数来自于itertools库,itertools库提供了非常有用的基于迭代对象的函数,而chain函数则是可以串联多个迭代对象来形成一个更大的迭代对象 。
实例1:

  1. from itertools import chain
  2. l1 = [1,2,3]
  3. l2 = [4,5]
  4. new_iter = chain(l1,l2) # 参数必须为可迭代对象
  5. print(new_iter)
  6. for i in new_iter:
  7. print(i)

效果图:
08-03 偏函数、chain函数 - 图4
实例2:

  1. from itertools import chain
  2. def f1(x):
  3. return x+1
  4. def f2(x):
  5. return x+2
  6. def f3(x):
  7. return x+3
  8. list_4 = [f1, f2]
  9. new_iter2 = chain([f3], list_4)
  10. for i in new_iter2:
  11. print(i)

效果图:
08-03 偏函数、chain函数 - 图5