python闭包函数和装饰器

一.闭包函数

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():
    ...
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值