map 接收函数f和list,并把函数f依次作用到list上
例如:
def format_name(s):
return s[:1].upper()+s[1:].lower()
print(map(format_name,['ade','Msas','varU'])) 将字符串首字母大写
reduce()函数也是Python内置的一个高阶函数。reduce()函数接收的参数和 map()类似,一个函数 f,一个list,但行为和 map()不同,reduce()传入的函数 f 必须接收两个参数,reduce()对list的每个元素反复调用函数f,并返回最终结果值。 需要导入
from functools import reduce
def prod(x, y):
return x * y
print(reduce(prod,[2,4,5,3,4])) 求所有数的积
filter()函数是 Python 内置的另一个有用的高阶函数,filter()函数接收一个函数 f 和一个list,这个函数 f 的作用是对每个元素进行判断,返回 True或 False,filter()根据判断结果自动过滤掉不符合条件的元素,返回由符合条件元素组成的新list。
def is_sqrt(x):
return math.sqrt(x)%1==0
print(list(filter(is_sqrt,range(1,101)))) 返回1到100范围内平方数
sorted()函数可对list进行排序:但 sorted()也是一个高阶函数,它可以接收一个比较函数来实现自定义排序,比较函数的定义是,传入两个待比较的元素 x, y,如果 x 应该排在 y 的前面,返回 -1,如果 x 应该排在 y 的后面,返回 1。如果 x 和 y 相等,返回 0。
def cmp_ignore_case(s):
return s.lower()
print(sorted(['sa','Ed','lK'],cmp_ignore_case)) 忽略大小写排序
python中返回函数 定义一个函数f,其内部再定义一个函数g,可通过x=f(),x()调用函数g。
from functools import reduce
def calc_prod(lst):
def prod(x, y):
return x * y
def ca():
return reduce(prod,lst)
return ca
python闭包 闭包的特点是返回的函数还引用了外层函数的局部变量,所以,要正确使用闭包,就要确保引用的局部变量在函数返回后不能变。举例如下:
def count():
fs = []
for i in range(1,4):
def f(a=i):
return a*a
fs.append(f)
return fs
f1,f2,f3=count()
f1()=1,f2()=4,f3=9;若a=i去掉,a*a换成i*i则结果都为9
import functools
class Person(object):
pass
p1 = Person()
p1.name = "a"
p2 = Person()
p2.name = "B" #忽略大小写排序
p3 =Person()
p3.name = "c"
L1 = [p1, p2, p3]
L2 = sorted(L1,key=lambda p1:p1.name.lower())
class Perso(object):
count = 0 #统计调用次数
def __init__(self,name,gender,**kw):
Perso.count = Perso.count + 1
self.name = name
self.__ender = gender
for k, v in kw.items():
setattr(self, k, v)