Python学习笔记__4.5章 偏函数(绑定函数参数)

# 这是学习廖雪峰老师python教程的学习笔记

1、概览

偏函数(Partial function)是functools模块的一个功能

functools.partial的作用就是,在一个已存在的函数基础上。把它的某些参数给固定住(也就是设置默认值),然后返回一个新的函数,调用这个新函数会更简单。

1.1、functools. partial 应用

已知:

int 函数可以将 ‘123’ ——》 123.

int 的 base 参数可以做 N 进制的转换

>>> int('12345', base=8)
5349
>>> int('12345', 16)
74565

使用:

#  partial 定义一个 固定2进制转换的函数

int2 = functools.partial(int, base=2)  # 定义过后,我们依然可以用其他值替换 base值,就像默认参数一样

解析:

创建偏函数时,实际上可以接收函数对象、*args和**kw这3个参数。

当传入:

int2 = functools.partial(int, base=2)

相当于:

kw = { 'base': 2 }    #  固定了一个关键字参数

int('10010', **kw)

当传入:

max2 = functools.partial(max, 10)  # 将10作为 *args 的一部分,自动加到了右边

相当于:

args = (10, 5, 6, 7)

max(*args)

补充:

对于像pow() 参数 ,range()参数,有多个参数的情况下。

p=functools.partial(pow,2),会固定第一个参数

原文地址:http://blog.51cto.com/12758568/2116748

时间: 2024-10-07 07:26:44

Python学习笔记__4.5章 偏函数(绑定函数参数)的相关文章

Python学习笔记__4.1章 高阶函数

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 我们知道Python内置的求绝对值的函数是abs() # 调用abs()函数可以获得一个值 >>> abs(-10) 10 # 那么,只写abs本身呢 >>> abs <built-in function abs> 可见,abs(-10)是函数调用,而abs是函数本身 1.1.将函数赋给变量 将函数赋给变量只有两种情况: 把函数计算得到的 结果 赋给变量 f=abs(-10) 把 函数本身 赋给变量

Python学习笔记__4.4章 装饰器(添加额外功能)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 装饰器可以帮助我们为已经存在的对象添加额外的功能 装饰器本质上是一个Python函数,它可以让其他函数在不需要做任何代码变动的前提下增加额外功能,装饰器的返回值也是一个函数对象. 装饰器经常用于有切面需求的场景,比如:插入日志.性能测试.事物处理.缓存.权限校验等场景. 1.1.为now函数 加一行日志 # 定义now函数 def now(): print('2018-5-8') # 编辑decorator def log(func):

Python学习笔记__4.2章 返回函数

# 这是学习廖雪峰老师python教程的学习笔记 1.函数作为返回值 高阶函数除了可以接受函数作为参数外,还可以把函数作为结果值返回. # 累加函数 def external(*args): def internal(): ax = 0 for n in args: ax = ax + n return ax return internal  # external的返回值是internal # 调用external() f = external(1, 3, 5, 7, 9)   #这里的 f是一

Python学习笔记__4.3章 匿名函数(简洁函数)

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 关键字lambda表示匿名函数 list(map(lambda x: x * x, [1, 2, 3, 4, 5, 6, 7, 8, 9])) # 列表生成式中的 lambda 实际就是 def f(x): return x * x 但匿名函数有个限制,就是只能有一个表达式. 匿名函数不用写return,返回值就是该表达式的结果 匿名函数因为函数没有名字,不必担心函数名冲突. 此外,匿名函数也是一个函数对象,可以把匿名函数赋值给一个变量

Python学习笔记__4.1.1章 map/reduce

# 这是学习廖雪峰老师python教程的学习笔记 1.map函数 map() 函数接收两个参数,一个是函数,一个是Iterable,map将传入的函数依次作用到序列的每个元素,并把结果作为新的Iterator返回 # 比如有一个函数f(x)=x2,要把这个函数作用在一个list [1, 2, 3, 4, 5, 6, 7, 8, 9]上 >>> def f(x): ...     return x * x list(map(str, [1, 2, 3, 4, 5, 6, 7, 8, 9])

Python学习笔记__4.1.2章 filter

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 Python内建的filter()函数用于过滤序列 和map()类似,filter()也接收一个函数和一个序列.和map()不同的是,filter()把传入的函数依次作用于每个元素,然后根据返回值是True还是False决定保留还是丢弃该元素. # 在一个list中,删掉偶数,只保留奇数 def is_odd(n): return n % 2 == 1 list(filter(is_odd, [1, 2, 4, 5, 6, 9, 10,

Python学习笔记__7.6章 使用原类

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 动态语言和静态语言最大的不同,就是函数和类的定义,不是编译时定义的,而是运行时动态创建的. 1.1.type() class的定义是运行时动态创建的,而创建class的方法就是使用type()函数. 通过type()函数创建的类和直接写class是完全一样的,因为Python解释器遇到class定义时,仅仅是扫描一下class定义的语法,然后调用type()函数创建出class. type()函数既可以返回一个对象的类型,又可以创建出新

Python学习笔记__10.3章 ThreadLocal

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 在多线程环境下,每个线程都有自己的数据.一个线程使用自己的局部变量比使用全局变量好,因为局部变量只有线程自己能看见,不会影响其他线程,而全局变量的修改必须加锁.但线程的局部变量,在函数调用时很麻烦 1)方式一:一层一层传 def process_student(name): std = Student(name)   # std是局部变量,但是每个函数都要用它,因此必须传进去: do_task_1(std) do_task_2(std)

Python学习笔记__10.5章 分布式进程

# 这是学习廖雪峰老师python教程的学习笔记 1.概览 在Thread和Process中,应当优选Process,因为Process更稳定,而且,Process可以分布到多台机器上,而Thread最多只能分布到同一台机器的多个CPU上. Python的multiprocessing模块不但支持多进程,其中managers子模块还支持把多进程分布到多台机器上.依靠网络通信,一个服务进程可以作为调度者,将任务分布到其他多个进程中.由于managers模块封装很好,不必了解网络通信的细节,就可以很