一、高阶函数
1.lambda函数
匿名函数或者叫匿名表达式
简单应用
概念
def show(): print("Python") show() func = show print(func) #这里func就是show func()
既然函数名能作为一个对象,那么其实他也可以作为一个参数被传递
def show(): print("Python") show() func = show print(func) #这里func就是show func() print("________________________________________________") def call_function(func): print(func) func() call_function(show)
lambda匿名函数就是创建一个对象,既然是对象就有引用地址
func = lambda : 1 + 1 print(func) print(func()) #带参定义和调用 func = lambda x: print(x ** 10) print(func) func(2)
2.lambda函数注意事项
#注意事项 #1.lambda默认返回表达计算结果,不需要return,如果加了return反而会报错 func = lambda x,y: return x + y #2.不能使用循环 func = lambda x,y: for i in range(x,y): print(i) #3.不能使用if的正常格式 func = lambda n : if n % 2 == 0
可以使用三目运算符
#4.但是可以使用if的三目运算符 func = lambda m,n: m if m > n else n print(func(1,2))
3.map用法
map()会根据提供的函数对指定序列做映射
计算每个元素的平方值
my_list = [1,2,3,4,5,6,7] #map调用的函数只有一个参数 def f(x): return x ** 2 result = map(f,my_list) print(type(result)) print(result) print(list(result))
map函数的本质就是一对一映射
4.map和lambda函数配合
my_list = [1,2,3,4,5,6,7] result_list = map(lambda n : n ** 4 , my_list) print(result_list) print(type(result_list)) list1 = [] for i in result_list: list1.append(i) print(list1)
二、reduce函数
1.reduce基本应用
reduce()函数会对参数序列中元素进行累计
函数将一个数据集合中的所有数据进行下列操作:
用传给reduce中的函数function(有两个参数)先对集合中的第1,2个元素进行操作。
得到的结果再与第三个数据用function函数运算,最后得到一个结果。
#reduce不能直接使用,需要导入一个模块functools import functools my_list = [1,2,3,4,5,6,7] def f(x1,x2): return x1 + x2 result = functools.reduce(f,my_list) print(result)
2.reduce和匿名函数配合
#reduce不能直接使用,需要导入一个模块functools import functools my_list = [1,2,3,4,5,6,7] result = functools.reduce(lambda x,y : x+y,my_list) print(result)
import functools my_list = list('hello') result = functools.reduce(lambda s1,s2 : s1.upper() + s2.upper() , my_list) print(result) result = functools.reduce(lambda s1,s2 : s1 + s2 , my_list) print(result) #求阶乘 num = [] for i in range(1,4): num.append(i) print(num) print("_________________________________________________________________") r = functools.reduce(lambda s1,s2 : s1 * s2, num) print(r)
三、filter()函数
手册定义:
filter()函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象,如果要转换为列表,可以使用list()来转换。
该接收两个参数,第一个为函数,第二个为序列,序列的每个元素作为参数传递给函数进行判断,然后返回True或False,最后将返回True的元素放到新的列表
1.简单用法
my_list = [1,2,3,4,5,6,7,8,9,10] def f(x): return x % 2 == 0 result = filter(f,my_list) print(list(result))
2.高阶应用
my_list = ['123','234','abd','!@#',' ','abc1235'] #过滤出所有纯数字的字符串 num_list = filter(lambda s:s.isdigit(),my_list) print(num_list) print(list(num_list)) #过滤出所有纯字符的字符串 num_list = filter(lambda s:s.isalpha(),my_list) print(num_list) print(list(num_list)) #过滤出所有纯空格的字符串 num_list = filter(lambda s:s.isspace(),my_list) print(num_list) print(list(num_list))
四、列表排列方法(key和lambda问题)
1.正常排序
my_list = [7,2,3,1,4,31,543,545,657,8,852,0] my_list.sort() print(my_list)
2.key值问题
如果是字典排序,那么直接使用sort会有问题
my_list = [7,2,3,1,4,31,543,545,657,8,852,0] my_list.sort() print(my_list) #上面的列表因为没有key所以排列默认按照数字方式排列,但是加上key并且二维字典会让这个问题变得很复杂 my_list = [{'id':1,'name':'tom','age':12},{'id':2,'name':'timi','age':20},{'id':3,'name':'alice','age':15},{'id':4,'name':'yuan','age':18}] my_list.sort() print(my_list)
这里对字典排序需要指定key,并且和lambda配合
3.lambda函数对key值的解决办法
my_list = [7,2,3,1,4,31,543,545,657,8,852,0] my_list.sort() print(my_list) #上面的列表因为没有key所以排列默认按照数字方式排列,但是加上key并且二维字典会让这个问题变得很复杂 my_list = [{'id':1,'name':'tom','age':12},{'id':2,'name':'timi','age':20},{'id':3,'name':'alice','age':15},{'id':4,'name':'yuan','age':18}] #按照id进行排序,默认升序 my_list.sort(key=lambda d : d['id']) print(my_list) #按年龄降序排列 my_list.sort(key=lambda d:d['age'],reverse=True) print(my_list)
五、文件
1.文件操作
#打开文件以写模块 file = open('a.txt','w') #关闭文件i/o,可省略 file.close() #打开文件以读模块 file = open('a.txt','r') #关闭文件i/o,可省略 file.close()
2.读取文件
file = open('a.txt','rt') content = file.read() print(content) file.close()
调整文件句柄读取数据
file = open('a.txt','rt') content = file.read(5) print(content) content = file.read(7) print(content) file.close()
这种方法适合小文件,因为i/o流不大,很快就能读完