# @staticmethod 静态装饰器,使用后在类里面不用加self属性
class A():
@staticmethod
def z():
print('静态装饰器')
A.z()
A().z()
class B():
# @staticmethod
def Q(self):
print('静态装饰器1')
B.Q(1)
B().Q()
class A():
@classmethod
def z(self):
print('静态装饰器')
A.z() #加上classmethod之后可以不用实例化类
A().z()
class A():
# @classmethod
def z(self):
print('静态装饰器')
A.z(2)
A().z()
def logger(func):
def wrapper(*args, **kw):
print('我准备开始计算:{} 函数了:'.format(func.__name__))
# 真正执行的是这行。
func(*args, **kw)
print('啊哈,我计算完啦。给自己加个鸡腿!!')
return wrapper
@logger
def add(x, y):
print('{} + {} = {}'.format(x, y, x+y))
add(12,34)
我='我'
print(我)
"""
闭包:首先2个函数
内部函数要使用外部函数中的变量===内部函数对外部函数的作用域里的变量的应用
"""
list=[1,2,3,4]
def func(num): #外部函数
print('func是外部函数',num)
a=1
def func1(): #内部函数
num[0]+=a #引用外部函数中的变量a和传入的num
print('func1是内部函数',num)
return num
return func1 #在外部函数中返回内部函数的名称 保留内部函数
var=func(list) #1.调用外部函数时 返回的是内部函数的名称,然后在赋值给var
print(var()) #2.加上括号后相当于调用了内部函数
"""
装饰器:不影响原有函数的功能上添加新的功能
先执行闭包,然后在闭包的内函数中返回执行的函数
"""
def A(B):
print('装饰器测试')
def A_(*args,**kwargs):
# B(*args,**kwargs)
return B(*args,**kwargs),'真正执行的是这一行'
return A_
@A
def z(x,y):
return x*y
print(z(1,2))
def niupi(func):
print('外部函数func')
def pp(*args,**kwargs):
print('内部函数6666')
return func(*args,**kwargs)
return pp
# var=niupi(1)
# var()
@niupi
def fun(x,y):
return x+y
print(fun(2,9))
python 闭包与装饰器学习笔记
最新推荐文章于 2024-05-14 11:00:23 发布