python入门(14)
装饰器
引用
def info():
print("这是学生信息")
# info()
a=info
print(id(a))
print(id(info))
a()
#2403573158640
#2403573158640
#这是学生信息
函数式编程
def info():
return "小王"
def printinfo(func):
'''
:param func: 需要传递的是一个函数,真正传递的是函数的引用
:return:
'''
a = func()
print("学生为:",a)
printinfo(info)
函数作为参数,函数作为返回值
def info():
return "小王"
def printinfo(func):
'''
:param func: 需要传递的是一个函数,真正传递的是函数的引用
:return:
'''
a = func()
print("学生为:",a)
return func
ret=printinfo(info)
print(ret())
# 学生为: 小王
# 小王
闭包
def line(k,b):
def fun(x):
y = k*x+b
return y
return fun
get_line=line(2,10)
print(get_line(3))
注意点:
在函数的内部再定义了一个函数,并且这个函数用到了外面这个函数的变量,那么这个函数以及用到的一些变量整体称为闭包
修改闭包函数外部函数的变量
def outer(num=2):
def inner():
# print('接受外部的参数',num)
nonlocal num
num+=1
print('将参数加一',num)
return inner
ret=outer()
ret()
# L local 本地作用域(局部变量)
# E enclosure 闭包所在作用域
# G global 全局变量
# B built-in 内置
开放封闭原则
已经实现的功能不能修改,只能扩展
装饰器
def authtificate(func):
'''
:param func: 需要进行登录验证的函数的引用
:return:
'''
def inner():
if '用户是登录':
print("已经经过装饰器")
func()
else:
print("用户没有登录")
return inner
@authtificate
def pay():
print("付款")
def change_password():
print("修改密码")
pay()
# 已经经过装饰器
# 付款
装饰器详情
def wrapper(func):
print("进入装饰器")
def inner():
print('真正执行装饰器')
func()
print("装饰完成")
return inner
@wrapper
def info():
print("这是被装饰的函数")
print("###########")
info()
# 进入装饰器
# 装饰完成
###############
# 真正执行装饰器
# 这是被装饰的函数