闭包
定义
闭包函数是指能够访问另一个函数作用域中变量的函数。当内部函数可以访问它们所在的外部函数中声明的所有局部变量、参数和其他内部函数时,如果其中一个这样的内部函数在包含它们的外部函数之外被调用,就会形成闭包,外部函数能将内部函数返回,内部函数能够访问内部函数的局部变量。
def fun1():
print("fun1")
dates =[1, 2, 3, 4, 5]
def fun2():
print("fun2", dates)
return fun2
r = fun1()
r()
装饰器
装饰器是python的一种很巧妙的功能,它允许用户在不修改函数或类原有代码的基础上,给函数或类动态地添加额外的功能。装饰器本质上是一个函数或类,它接受一个函数或类作为输入,并返回一个新的函数或类作为输出。
装饰器的定义与特性
定义:装饰器在代码运行期间动态增加功能的方式,称之为“装饰器”。装饰器本质上是一个Python函数或类,它可以让其他函数或类在不需要做任何代码修改的前提下,动态增加功能。
特性:
函数或类:装饰器可以是一个函数或类。
不修改原代码:能够在不修改原函数或类代码的前提下,为其增加额外的功能。
返回函数或类对象:装饰器的返回值也是一个函数或类对象。
装饰器的使用场景
插入日志:记录函数的调用情况、参数、返回值等。
性能测试:统计函数或方法的执行时间,以评估性能。
事务处理:确保一系列操作要么全部成功,要么在遇到错误时全部回滚。
缓存:缓存函数的执行结果,避免重复计算,提高程序性能。
权限校验:检查用户是否有权限执行某个操作。
装饰器的案例
由于水平有限展示基础案例:
用装饰器验证核验操作
user = None
def name_psd_msg(f):
def check():
global user
if user:
f()
else:
while True:
user_name = input("输入用户名")
password = input("输入密码")
if user_name == "admin" and password == "123456":
user = user_name
f()
break
else:
print("输入错误")
return check
def index():
print(f"我是首页")
@name_psd_msg
def center():
print(f"我是个人中心")
@name_psd_msg
def cart():
print(f"我是购物车")
index()
center()
cart()
装饰器主要分为两种类型:函数装饰器和类装饰器。
函数装饰器:
函数装饰器是最常见的装饰器类型,它接受一个函数作为输入,并返回一个新的函数作为输出。
基本语法是在函数定义之前,使用@符号加上装饰器的名称来应用装饰器。
示例代码:
def my_decorator(func):
def wrapper():
print("Before function call")
func()
print("After function call")
return wrapper
@my_decorator
def say_hello():
print("Hello!")
say_hello() # 输出:Before function call,Hello!,After function call
类装饰器:
类装饰器是以类作为装饰器的实现方式,它允许使用类来实现装饰器的功能。
类装饰器通常定义了一个类,并在实例化这个类时传入一个函数作为参数,然后这个类返回一个修改后的函数。
示例代码:
class MyDecorator:
def __init__(self, func):
self.func = func
def __call__(self, *args, **kwargs):
print("Before function call")
result = self.func(*args, **kwargs)
print("After function call")
return result
@MyDecorator
def say_hello():
print("Hello!")
say_hello() # 输出:Before function call,Hello!,After function call
通过装饰器,我们可以实现代码的重用、日志记录、性能测试、事务处理、缓存、权限校验等多种功能。
标签:闭包,函数,call,print,或类,装饰,def From: https://blog.csdn.net/vloggyh/article/details/140625458