1. 函数名的使用, 第一类对象
1. 函数名可以像变量一样进行赋值操作
2. 函数可以作为容器(list, tuple, dict)的元素, 保存在容器内
3. 函数可以作为返回值返回
4. 函数可以作为参数进行传递
def func1():
print("我是func1")
def func2():
print("我是func2")
def func3():
print("我是func3")
lst = [func1, func2, func3]
for e in lst:
e() # e表示的是lst中的每一个函数. 函数()执行函数. e() 执行每一个函数
def func1():
print("哈哈")
def func2():
print("呵呵")
def func3():
print("嘻嘻")
return func3
return func2
fn = func1() # 哈哈
print("============>")
fn() #
def func(fn):
fn()
def func1():
print("你好")
func(func1)
2. 闭包
目的: 让内存永远的记住一个变量
在内层函数中访问外层函数的局部变量. 叫闭包. 这个时候. 外层的这个局部变量将会常驻内存
from urllib.request import urlopen
def func():
content = urlopen("http://www.xiaohua100.cn/index.html").read()
def inner():
print("abc")
return inner
fn = func()
print(fn.__closure__) # 检查闭包
3. 装饰器(初识)
开闭原则(开放封闭原则): 对添加功能开放. 对修改代码封闭.
语法糖:
@装饰器名字
总结:
def wrapper(fn):
def inner(*args, **kwargs):
'''目标函数之前你要做什么'''
ret = fn(*args, **kwargs)
'''目标函数之后你要做什么'''
return ret
return inner
@wrapper
def target():
pass
def create_people():
print("捏泥人, 吹口气")
# 装饰器的雏形
def water(fn):
def inner():
print("浇水")
fn() # 目标函数被执行
return inner
create_people = water(create_people)
create_people()
def yue(name, name2, name3, name4, name5):
print("约一约", name, name2, name3, name4, name5)
def wen_wu(fn):
def inner(*args, **kwargs): # 聚合
print("问问wusir")
ret = fn(*args, **kwargs) # 打散
print("傻逼, 骗我")
return ret
return inner
@wen_wu # dajia = wen_wu(dajia)
def dajia(name):
print("我要干你", name)
return "伤啊"
# dajia = wen_wu(dajia)
ret = dajia("徐阳")
print(ret)
def zaoren():
print("捏人")
def water(fn):
def inner():
print("浇水")
fn()
return inner
zaoren = water(zaoren)
zaoren()