PYTHON学习笔记9(匿名函数、装饰器、数据结构)
匿名函数python使用lambda来创建匿名函数不需要使用def关键字定义完整函数。lambda函数是一种小型、匿名、内联的函数可以具有任意数量的参数但只能有一个表达式。通常用于编写简单的、单行的函数通常在需要函数作为参数传递的情况下使用。lambda函数有以下特点1、是匿名的没有函数名称只能通过赋值给变量或作为参数传递给其他函数来使用。2、通常只包含一行代码语法格式lambda arguments:expression #lambda是关键字用于定义lambda函数 #arguments是参数列表可以包含零个或多个参数 #expression是一个表达式用于计算并返回函数的结果下面分别是零参数、一个参数和多个参数的匿名函数的例子#没有参数的匿名函数 f lambda:hello print(f()) #输出结果hello #有参数的匿名函数 x lambda a : a * a print(x(3)) #输出结果9 #多个参数的匿名函数 y lambda a,b : a * b print(y(2,3)) #输出结果6lambda函数通常与内置函数如map、filter等函数一起使用以便在集合上执行操作。num [1,2,3,4,5] squared list(map(lambda x: x*x, num)) print(squared) #输出结果[1, 4, 9, 16, 25]装饰器装饰器是python中的一种高级功能允许我们动态的修改函数或类的行为。装饰器是一种函数它接收一个函数作为参数并返回一个新的函数或修改原来的函数。装饰器语法decorator_namepython还提供了一些内置的装饰器如staticmethod定义静态方法classmethod定义类方法。装饰器应用场景日志记录装饰器可用于记录函数的调用信息、参数和返回值性能分析可用于使用装饰器来测量函数的执行时间权限控制可用于限制对某些函数的访问权限缓存可用于实现对函数结果的缓存以提高性能基本语法装饰器本质是一个接收函数作为输入并返回一个新的包装过后的函数的对象。通过装饰器可以在保持代码整洁的同时灵活高效地扩展程序的功能。下面是一个装饰器的例子decorator是一个装饰器函数它接收一个函数func作为参数然后返回一个内部函数wrapper在wrapper函数内部可以执行一些额外的操作然后调用原始函数func并返回其结果。在下面的例子中my_decorator是一个装饰器函数接受say_hellp作为参数然后返回wrapper函数。def my_decorator(func): def wrapper(): print(函数执行前) func() print(函数执行后) return wrapper my_decorator def say_hello(): print(Hello!) say_hello()输出结果函数执行前 Hello! 函数执行后类装饰器类装饰器是一种用于动态修改类行为的装饰器他接收一个类作为参数并返回一个新的类或修改后的类。类装饰器应用添加/修改类的方法或属性拦截实例化过程实现单例模式、日志记录、权限检查等功能常见形式函数形式的类装饰器接收类作为参数、返回新类类形式的类装饰器实现_call_方法使其可调用内置装饰器staticmethod: 将方法定义为静态方法不需要实例化类即可调用。classmethod: 将方法定义为类方法第一个参数是类本身通常命名为cls。property: 将方法转换为属性使其可以像属性一样访问。在使用时也可以将多个装饰器堆叠在一起它们会按照从下到上的顺序依次应用。数据结构列表在python中可以使用列表来实现栈的功能栈——后进先出的数据结构即最后添加的元素最先被移除。列表的append()可以把一个元素添加到栈顶、pop()方法可以把一个元素从栈顶释放出来。栈操作压入 Push将一个元素添加到栈顶弹出 Pop移除并返回栈顶元素查看栈顶元素 Peek/Top返回栈顶元素而不移除它检查是否为空 IsEmpty检查栈是否为空获取栈的大小 Size获取栈中元素的数量1、创建空栈s []2、压入s [] s.append(1) s.append(2) s.append(3) print(s) #输出结果[1, 2, 3]3、弹出s [] s.append(1) s.append(2) s.append(3) s2 s.pop() print(s2) print(s) #输出结果3 [1, 2]4、查看栈顶元素s [] s.append(1) s.append(2) s.append(3) s3 s[-1] print(s3) #输出结果35、检查是否为空s [] s.append(1) s.append(2) s.append(3) is_empty len(s) 0 print(is_empty) #输出结果False6、获取栈大小s [] s.append(1) s.append(2) s.append(3) size len(s) print(size) #输出结果3队列队列是一种先进先出的数据结构最早添加的元素最先被移除。在python中可以使用collections.deque实现队列。使用列表也可以实现队列但使用collections.deque更高效简洁。from collections import deque # 创建一个空队列 queue deque() # 向队尾添加元素 queue.append(a) queue.append(b) queue.append(c) print(队列状态:, queue) # 输出: 队列状态: deque([a, b, c])遍历技巧在字典遍历中关键字和对应值可以使用items()方法同时解读出来。k {liming:98,jenny:100} for k,v in k.items(): print(k,v) #输出结果 #liming 98 #jenny 100在序列遍历中索引位置和对应值可以使用enumerate()函数同时得到。a [liming,jenny,danny] for i,v in enumerate(a): print(i,v) #输出结果 #0 liming #1 jenny #2 danny反向遍历一个序列先指定序列然后调用reversed()函数。按顺序遍历一个序列使用sorted()函数返回一个已排序的序列并不修改原值。