一.闭包函数
1. 闭包函数:
(1)内部函数
(2)包含对外部作用域而非全局作用域的引用
2. 闭包函数的特点:
(1)自带作用域
注:函数的作用域关系在函数定义阶段就已经固定,与调用位置无关
无论函数在何处调用,都需要回到定义阶段去找对应的作用域关系
(2)延迟计算
3. 定义闭包函数的基本形式:
def 外部函数名():
内部函数需要的变量
def 内部函数():
引用外部变量
return 内部函数
4. closure:
func.__closure__ #判断是不是闭包函数
func.__closure__[0].cell_contents #查看闭包引用的具体内容,[0]指第一项内容,引用顺序由内到外
5. 读取网站内容:
from urllib.request import urlopen
def index(url):
def get():
return urlopen.(url).read()
return get
Python = index(‘http://www.python.org’)
二.装饰器
1. 开放封闭原则:
对扩展是开放的,对修改是封闭的
2. 特点:
装饰器本质是任意可调用对象,被装饰的对象也可以是任意可调用对象
(1)功能:在不修改被装饰对象源代码以及调用方式的前提下为其添加新功能
(2)原则:
不修改源代码
不修改调用方法
(3)目标:添加新功能
3. 格式:
(1)装饰器
def deco():
def wrapper(*args,**kwargs):
...
res = func(*args,**kwargs)
...
return res
return wrapper
(2)被装饰函数
@deco2 #装饰器语法:在被装饰对象的正上方的单独一行,@装饰器名字,若有
@deco1 #多个装饰器则另起一行写,判断函数关系时由内向外,执行时由外向内
def index():
...