Day19智能体测开Python
高阶函数# 高阶函数 高阶函数可以对集合、元组或列表的每个元素进行操作生成一个新的集合、元组或列表返回 map(函数列表) filter(函数列表) sorted(列表) # map(函数列表):将列表的单个元素逐个作为函数的参数传入在函数中对列表的元素进行处理操作然后通过map函数返回在新的列表中 def change(x): return x-- li [tom,abc,kjd,kjcxv] m map(change,li) print(type(m)) # class map print(list(m)) # 简化代码 l_new list(map(change,li)) print(l_new) l_new1 list(map(lambda x:x--,li)) print(l_new1) #将列表中的每个字符串转变成整数 l_num [3,7,34,78,87] l_new2[] for i in l_num: n int(i) l_new2.append(n) l_new3 list(map(int,l_num)) print(l_new3) # 将名字列表中的所有姓去掉 names (张思思,冷礼亮,高丽航,基洛夫) names_new tuple(map(lambda a:a[1::],names)) print(names_new) filter(函数,列表)列表的元素逐个传入到函数中作为函数的参数 函数的参数是单个参数返回值必须是布尔值 如果返回的布尔值是Ture,则将该元素保留存储到filter返回的新列表中 如果返回的布尔值是False,则将该元素筛除掉 # 过滤回文字符或数字 l [23432,787,abcba,kjfg,delkjkled,9679] # 判断是回文[::-1] str(x)str(x)[::-1] l1 list(filter(lambda x:str(x)str(x)[::-1],l)) print(l1) # str(x)str(x)[::-1] and len(str(x))5 # 提取字符串长度大于等于5的回文元素或者数字位数大于等于5的回文元素 l2 list(filter(lambda x:str(x)str(x)[::-1] and len(str(x))5,l)) print(l2) # 提取字符串长度大于等于5的元素 def get_str(x): # if type(x) str and len(x)5: # # if len(x)5: # return True # else: # return False return type(x) str and len(x)5 l3 list(filter(get_str,l)) print(l3) l4 list(filter(lambda x:type(x) str and len(x)5 ,l)) print(l4) sorted(列表) list1 [3,1,2,4,54,21,33,53,18] list2 sorted(list1,reverseTrue) print(list2) list3[lucy,tom,jack,mandy,lily,zhanmusi] list4sorted(list3) print(list4) # 安装字符串的长度进行排序 list5 sorted(list3,keylambda x:len(x)) print(list5)返回值为函数# 返回值为函数 def abc(): return None或单个数据整数小数字符串列表元组集合字典函数 函数中的return如果返回一个函数该函数必须是内层函数内层函数即为定义在函数中的函数 def outer(): print(**************) def inner(): # 内层函数 print(---------------------) return inner a outer() print(type(a))#class function a() # 简化 outer()() def outer1(n): def inner1(m): print(fn{n},m{m}) return inner1 outer1(2)(45) def outer2(n): def inner2(m): print(fn{n},m{m}) return nm return inner2 sum outer2(3)(34) print(sum)装饰器# 装饰器 装饰器的目的允许动态修改函数但是不改变源函数的内容 装饰器本质上是一个函数接受一个函数作为参数将函数进行扩展形成新的函数最后将新函数进行返回 这个新函数一般会在源函数执行的前面和执行的后面添加一些代码扩展他的功能 使用场景 日志记录: 装饰器可用于记录函数的调用信息、参数和返回值。 性能分析: 可以使用装饰器来测量函数的执行时间。 权限控制: 装饰器可用于限制对某些函数的访问权限。 缓存: 装饰器可用于实现函数结果的缓存以提高性能。 import random import time # 定义一个装饰器 def count_time(f): # 定义内层函数 def inner(*args,**keys): # 定义时间戳1 time1 time.time() print(f--开始执行{f.__name__}函数,参数为{args} {keys}--) # 执行函数 r f(*args,**keys) # 定义时间戳2 time2 time.time() print(f函数的执行时间为{time2-time1}秒) return r return inner count_time # 使用装饰器 def function1(n): print(--------function1-----------) # 执行代码 sum 0 for i in range(n): sumi return sum # 定义函数 count_time def function2(): print(--------function2-----------) # 执行代码 # 获取一个随机时间让系统暂停随机时间 s random.randint(1, 3) time.sleep(s) s function1(1000000) print(s) function2()内置函数# 内置函数 python提供了一些内置函数 int() float() print() list() set() ord() chr() max() eval() 计算字符串的 zip() a 49 print(a) print(eval(a)) print(eval(48)) print(type(eval([4,5,56,6]))) b {user:tom,age:45} print(type(eval(b))) c [3,4,5,6,7,8] d[abc,def,ght] f[,*,%] e zip(c,d,f) print(e) # zip object at 0x000001BEC17E7880 print(list(e)) g hello world h enumerate(g) #enumerate迭代器去迭代g for index,char in h: # index下标 char字符 enumerate迭代器去迭代g if char l: print(index)迭代器和遍历的区别普通遍历for val in 可迭代对象仅返回元素无内置索引需手动i 1计数代码冗余底层临时迭代器循环结束销毁原容器可重复遍历无自定义起始编号功能适用场景仅读取元素不关心元素位置局限修改原容器指定下标元素、区分元素顺序时实现繁琐。enumerate 迭代遍历返回迭代器每次输出(index, value)二元组索引随迭代自动递增支持startN自定义起始下标不用手动偏移生成独立迭代对象一次性消耗遍历完毕无法二次使用适用场景需要下标、序号、按位置修改列表、编号输出底层原理封装原迭代器内部维护私有计数器惰性生成数据内存开销极小。课后作业# 1定义一个lambda函数实现功能 # 参数为x,判断该参数是奇数还是偶数是奇数返回False,是偶数返回True x 2 print(bool(lambda x:x%20)) # 使用高阶函数实现以下功能 # 2 list1 [5,23,1,5,7,98,6,7] # 将列表中的所有数值,都改成它的平方10 list1 [5,23,1,5,7,98,6,7] l_new1 list(map(lambda x:x**210,list1)) print(l_new1) # 3lst [tom,lily,张三,lucy,阿斯蒂芬,sdafa] # 将名字中姓张的元素排除掉 lst [tom,lily,张三,lucy,阿斯蒂芬,sdafa] l list(filter(lambda x:x[0] ! 张,lst)) print(l) # 4定义一个装饰器实现功能判断一个函数的用户名参数是不是admin,是的话执行函数不是的话打印告知没有权限执行该方法 def isadmin(f): # 定义内层函数 def inner(*args,**keys): if args[0] admin: # 执行函数 print(-----) f(*args) return inner isadmin def function(name): if name admin: print(函数运行成功) function(admin)1什么是装饰器装饰器的目的允许动态修改函数但是不改变源函数的内容装饰器本质上是一个函数接受一个函数作为参数将函数进行扩展形成新的函数最后将新函数进行返回这个新函数一般会在源函数执行的前面和执行的后面添加一些代码扩展他的功能使用场景日志记录: 装饰器可用于记录函数的调用信息、参数和返回值。性能分析: 可以使用装饰器来测量函数的执行时间。权限控制: 装饰器可用于限制对某些函数的访问权限。缓存: 装饰器可用于实现函数结果的缓存以提高性能。2常见的高阶函数有哪些分别是做什么的map(函数列表):将列表的单个元素逐个作为函数的参数传入在函数中对列表的元素进行处理操作然后通过map函数返回在新的列表中filter(函数,列表)列表的元素逐个传入到函数中作为函数的参数函数的参数是单个参数返回值必须是布尔值如果返回的布尔值是Ture,则将该元素保留存储到filter返回的新列表中如果返回的布尔值是False,则将该元素筛除掉sorted(可迭代对象)生成新排序后的列表不会修改原数据。