-
map()
函数接收两个参数,一个是函数,一个是序列,map
将传入的函数依次作用到序列的每个元素,并把结果作为新的list返回。
>>> s = ['AASDa', 'dendY']
>>> def formatStr(ss):
return ss[0].upper() + ss[1:len(ss)].lower()
>>> v = formatStr('aaaB')
>>> v
'Aaab'
>>> map(formatStr, s)
<map object at 0x000000000320A668>
>>> for v in map(formatStr, s):
print(v)
Aasda
Dendy
-
reduce把一个函数作用在一个序列[x1, x2, x3...]上,这个函数必须接收两个参数,reduce把结果继续和序列的下一个元素做累积计算,其效果就是:
reduce(f, [x1, x2, x3, x4]) = f(f(f(x1, x2), x3), x4)
>>> L = [2, 3, 4]
>>> def prod(a, b):
return a * b
>>>
>>> from functools import *
>>> reduce(prod, L)
24
>>>
-
filter函数,方法同map,目的是过滤list中符合条件的元素:
>>> s = [1, 2, -3, -5]
>>> def notLt0(x):
return x >= 0
>>> filter(notLt0, s)
<filter object at 0x000000000320A940>
>>> for v in filter(notLt0, s):
print(v)
1
2
>>>
如上的示例,定义一个notLt0的方法,该方法用于判断元素是否大于等于0,是则返回True,否则返回False。而filter则会将列表s的每一个元素作为参数调用notLt0方法,最后将所有返回True的元素重新组装成一个list返回。
其中fn为返回的匿名函数,例如:
'''
匿名函数
'''
f = lambda x : x * x
print(f(2))
-
函数的闭包,类似javascript的闭包,即外部函数返回内部函数的引用,内部函数可能持有外部函数变量的引用,例如:
'''
闭包
'''
def count():
fs = []
for i in range(1, 4):
def f():
print(i)
return i * i
fs.append(f)
return fs
f1, f2, f3 = count()
print('before execute...')
print(f1()) # 输出:9
print(f2()) # 输出:9
print(f3()) # 输出:9
print('after execute...')
由于每次执行fn()时,i的值都变为了3,所以输出的结果并非预期的1,4,9,解决这种问题有多种方式,可以再定义一层闭包,也可以将fs中的元素修改为f函数的执行结果,而不是函数引用。
-
装饰器(decorator),包装目标函数,在不改变原目标函数的情况下,对其进行包装,实现更多的功能。
例如:实现一个打印日志的装饰器:
'''
装饰器
'''
# 定义一个装饰器(decorator)
def log(fn):
def wrapper(*args, **kw):
print('call : %s' % (fn.__name__))
return fn(*args, **kw)
return wrapper
@log
def func():
print ('hello!')
func()
其中,log函数为一个装饰器,除了完成fn函数本身的功能外,还添加了打印日志的功能,log函数返回一个装饰函数wrapper,打印的结果:
Python中使用@符号来表示装饰器(不是java的注解,形式类似),在执行func函数时,解释器看到@符号标识,会先执行log方法,并将func函数作为参数,此时func函数依然存在,但是同名的func变量会指向wrapper函数:
func = wrapper(*args, **kw):
print('call : %s' % (fn.__name__))
return fn(*args, **kw)
所以,执行func()函数其实执行的是wrapper函数。
上边为最简单的装饰器,如果我们要实现可自定义参数的装饰器呢?
# 自定义文本的装饰器
def log(text):
def decorator(fn):
def wrapper(*args, **kw):
print('log : %s, function name : %s. ' % (text, fn.__name__))
fn(*args, **kw)
return wrapper
return decorator
@log('this is a log text.')
def func():
print ('hello!')
func()
print(func.__name__) # 输出:wrapper
如上,我们需要再定义一个函数decorator来接收我们定义的参数信息,除了上边的执行过程外,在调用func函数时,解释器会先执行log和decorator函数,最后在执行wrapper函数,形式如下:
- 偏函数,functools.partial,固定函数参数,形成新的函数:
如果我们需要在转换为int的时候确定进制,Python提供了int方法:
base为此时x的进制数,默认为10,我们写一个将二进制字符串转换为int的方法:
def int2(x):
return int(x, base = 2)
s = int2('110')
print (s) # 输出6
但是,其实Python已经为我们做了这样的事情,那就是利用functools.partial的方法:
int2 = functools.partial(int, base = 2)
s = int2('110')
print (s) # 输出6
当然,该函数用法有很多,例如将max函数默认与一些元素比较:
max2 = functools.partial(max, 10, 20, 30)
s = max2(1, 2, 3, 40)
print(s) # 输出:40
s = max2(1, 2, 3)
print(s) # 输出:30
这样,max函数在比较的元素中,默认会加入10,20,30了。
分享到:
相关推荐
Python编程 函数装饰器.pdf 学习资料 复习资料 教学资源
那么我们是否可以开发自定义的函数装饰器呢? 答案是肯定的。当程序使用“@函数”(比如函数 A)装饰另一个函数(比如函数 B)时,实际上完成如下两步: 1. 将被修饰的函数(函数 B)作为参数传给 @ 符号引用的...
[翻译]理解python中的装饰器[翻译]理解PYTHON中的装饰器[翻译]理解python中的装饰器python的函数是对象函数引用手工装饰器装饰器阐述最后回
装饰器的结合使用; 使用filter函数打印出1~100内所有能被3整除的数。 输入一个数,使用reduce计算这个数的阶乘。 实现乘法重载,将两个列表对应元素相乘。 参照课件实例,完成鱼、鸟和水鸟的多继承创建。 类...
python装饰器的4中类型:函数装饰函数、函数装饰类、类装饰函数、类装饰类的详细说明。
一般情况下,在函数中可以使用一个装饰器,但是有时也会有两个或两个以上的装饰器。多个装饰器装饰的顺序是从里到外(就近原则),而调用的顺序是从外到里(就远原则)。 原代码 执行结果 装饰顺序 : 就近原则 被...
主要介绍了Python函数装饰器实现方法,结合实例形式较为详细的分析了Python函数装饰器的概念、功能、用法及相关操作注意事项,需要的朋友可以参考下
今天小编就为大家分享一篇关于Python装饰器限制函数运行时间超时则退出执行,小编觉得内容挺不错的,现在分享给大家,具有很好的参考价值,需要的朋友一起跟随小编来看看吧
python装饰器是一个用于封装函数、方法或类的代码的工具,用来显式指定管理它们的代码。一次编写,可用于多种不同的情况。在python 的流行框架中,装饰器应用越来越广泛。用类设计装饰器,可以利用实例属性保持装饰...
12.10_装饰器(三)|函数式编程__匿名函数、高阶函数、装饰器|Python3.8入门_&_进阶_&_原生爬虫实战完全解读
仅用一个装饰器,就可以跟踪一个Python函数执行的本地上下文
本文实例讲述了Python函数装饰器原理与用法。分享给大家供大家参考,具体如下: 装饰器本质上是一个函数,该函数用来处理其他函数,它可以让其他函数在不需要修改代码的前提下增加额外的功能,装饰器的返回值也是一...
作用:实现python装饰器。 闭包三要素: – 必须有一个内嵌函数。 – 内嵌函数必须引用外部函数中变量。 – 外部函数返回值必须是内嵌函数。 闭包函数的调用方式: 变量 = 外部函数名(参数) 变量(参数) 函数名变量...
作业_python生成器&闭包函数&装饰器.txt 类装饰器&反射 源码
不推荐使用的装饰器Python @deprecated装饰器弃用旧的python类,函数或方法。安装pip install Deprecated用法要使用此功能,请使用@deprecated装饰器装饰不推荐使用的函数: from deprecated import deprecated@ ...
主要介绍了Python编写函数装饰器的相关资料,需要的朋友可以参考下
代码实现python中各类型函数,熟悉各类函数的功能。包括1. 基本语法、2. 高级函数、3. 递归、4. 生成器与迭代器、5. 闭包与装饰器