首页 > 代码库 > [Python笔记]Python学习笔记三
[Python笔记]Python学习笔记三
Python高阶函数
filter() 用于过滤序列
第一个参数接收一个函数,根据返回值来决定是否保留, True则留下,False则丢弃
def is_odd(n): return n%2 == 1filter( is_odd, range(1,16) )def not_empty(s): return s and s.strip()filter( not_empty, [ ‘A‘, ‘ ‘, ‘B ‘, None, ‘ ‘ ])
内置sorted()函数用于列表排序
返回函数
将函数作为返回值, 这就涉及到"闭包"
返回函数不要引用任何循环变量,或者后续可能会发生变化的变量。
记住经典的循环问题,最后得到的数都是一样。
匿名函数:lambda表达式
匿名函数只能有一个表达式,不用写return
map(lambda n: n*n, range(1,11))# 匿名函数的语法就是 lambda关键字后面跟上函数参数,再加冒号 : 没有return
匿名函数也可以作为函数的返回值使用
装饰器
在Python中,任何事物都是对象。 函数也是一个对象,函数对象有 __name__ 属性
def now(): print ‘2016-03-23‘f = nownow.__name__ # ‘now‘f.__name__ # ‘now‘
在代码运行期间动态添加功能的方式就叫做 "装饰器Decorator" 本质上就是一个返回函数的高阶函数。
import functools
# 一个最简单的无参数的装饰器# 定义一个能打印日志的函数作为装饰器# 装饰器的本质就是返回一个函数def log(func):
@functools.wraps(func) def wrapper(*args, **kw): print ‘call %s():‘%func.__name___ return func(*args, **kw) return wrapper# 使用装饰器的语法就是使用@符号将其放置在其他函数之上@log #等价于 now = log(now)def now(): print ‘2016-03-23‘now()# 一个需要传入参数的装饰器def log(text): def decorator(func):
@functools.wraps(func) def wrapper(*args, **kw): print ‘%s %s()‘%(text, func.__name__) return func(*args, **kw) return wrapper return decorator@log(‘execute‘) # 等价于 log(‘execute‘)(now)def now(): print ‘2016-03-23‘now()
为了不把原始函数的__name__属性进行修改,需要使用内置的 functools.wraps装饰器来保证属性不被修改。
#!/usr/bin/env python# Python装饰器小练习# 写出一个@log的装饰器,使得它既支持无参数,也支持带参数import functoolsimport timedef log(obj): if isinstance(obj, (str,int,float,bool)): param = obj def decorator(func): @functools.wraps(func) def wrapper(*args, **kw): print ‘call %s() begin with param %s:‘%(func.__name__, param) res = func(*args, **kw) print ‘call %s() end:‘%func.__name__ return res return wrapper return decorator else: @functools.wraps(obj) def wrapper(*args, **kw): print ‘call %s() begin:‘%obj.__name__ res = obj(*args, **kw) print ‘call %s() end‘%obj.__name__ return res return wrapper# 写出一个装饰器用于在函数调用前后分别打印出‘begin call‘和‘begin end‘日志import functoolsimport timedef showFunName(func): @functools.wraps(func) def wrapper(*args,**kw): print ‘begin call‘ res = func(*args, **kw) print ‘begin end‘ return res return wrapper@showFunNamedef myFunc(): print ‘executing...‘myFunc()
偏函数
functools.partial()作用就是将一个函数的某些参数的值进行固定,从而返回一个新的函数,使得调用该函数变得更加简单。
由于任何函数都可以接收定义参数,可变参数,关键字参数。所以调用functools.partial()方法时也可以传入这两种参数。
[Python笔记]Python学习笔记三
声明:以上内容来自用户投稿及互联网公开渠道收集整理发布,本网站不拥有所有权,未作人工编辑处理,也不承担相关法律责任,若内容有误或涉及侵权可进行投诉: 投诉/举报 工作人员会在5个工作日内联系你,一经查实,本站将立刻删除涉嫌侵权内容。