装饰器
引用
def info():
print('这是学生信息')
#info()
a = info
print(id(a))
print(id(info))
a()
展示:
4009632
4009632
这是学生信息
函数式编程
def info():
return '小王'
def success():
print('返回值函数')
def printinfo(func):
'''
:param func:需要传递的是一个函数,真正传递的是函数的引用
:return:
'''
name = func()
print(name)
return success
ret_func = printinfo(info)
ret_func()
注意点:
1、函数作为返回值,函数作为参数,不能添加(),如果添加()作为的就是函数的调用了
闭包
def out(k,b):
def fun(x):
y = k*x +b
print(x,y)
return fun
ret = out(10,10)
print(ret)
ret(10)
注意点:
在函数的内部再定义了一个函数,并且这个函数用到了外面这个函数的变量,那么这个函数以及用到的一些变量称之为闭包
修改闭包函数外部函数的变量
a = 100
def outer(num=2):
def inner():
nonlocal num
num = num +1
print('将参数加1',num+1)
return inner
ret = outer()
ret()
#L local 本地作用域(局部变量)
#E enclosure 闭包所在作用域
#G global 全局变量
#B built-in 内置
注意点:
1、Python3 的写法
、
def outer1(num=2):
list_new = [num]
def inner():
list_new[0] += 1
print('将参数加1',num+1)
return inner
注意点:
Python2的写法
开放封闭原则
写代码遵循开放封闭原则
已经实现功能的封闭,已经实现功能的代码不允许被修改,但是可以被扩展
装饰器
def authtificate(func):
'''
:param func: 需要进行登录验证的函数的引用
:return:
'''
def inner():
if '用户是登录':
print('已经经过装饰器了')
func()
else:
print('用户没有登录')
return inner
@authtificate
def pay():
# print('验证登录')
# authtificate()
print('付款')
def chage_password():
# print('验证登录')
# authtificate()
print('修改密码')
装饰器的详细介绍
def wrapper(func):
print('进入装饰器')
def inner():
print('真正执行装饰')
func()
print('装饰已经完成')
return inner
@wrapper
def info()
print('这是被装饰的函数')
info()
# ret = wrapper(info)
#ret()