闭包,装饰器以及类属性对象属性的练习

1.什么是闭包?
闭包的特征?
定义闭包,完成的功能为:传入一个数求和并输出
例如: 传入10 ->输出10
传入15 ->输出25
传入20 ->输出45

# 闭包的作用:
# 隐藏一些不需要暴露给外部使用的变量,减少变量被修改或出错的可能性
# 闭包的要点:
# 1)存在嵌套函数
# 2)将内部函数作为返回值返回
# 3)内部函数使用了外部函数的变量


def out_f():
    num = []
    def int_f(n):
        num.append(n)
        return sum(num)
    return int_f
int_f1 = out_f()
print(int_f1(10))
print(int_f1(15))
print(int_f1(20))



'''
10
25
45
'''


2.定义一个装饰器:打印函数运行花费的时间
你在执行之前获取一个时间
执行函数
在执行函数之后获取一个时间
去求时间差
time模块

# 定义一个计算执行时间的函数作装饰器,传入参数为装饰的函数或方法
def print_execute_time(func):
    from time import time
# 定义嵌套函数,用来打印出装饰的函数的执行时间
    def wrapper(*args, **kwargs):
# 定义开始时间和结束时间,将func夹在中间执行,取得其返回值
        start = time()
        func_return = func(*args, **kwargs)
        end = time()
# 打印方法名称和其执行时间
        print(f'函数执行花费时间: {end - start}s')
# 返回func的返回值
        return func_return
# 返回嵌套的函数
    return wrapper
# 定义一个随机数求和的方法,传入参数是随机数的个数,加上刚才定义的装饰器

@print_execute_time
def my_sum(n):
    sum = 0
    for i in range(n):
        sum += i
    return sum


print(my_sum(101))
print(my_sum(10000001))



'''
函数执行花费时间: 0.0s
5050
函数执行花费时间: 0.4292259216308594s
50000005000000
'''


3.定义一个类:
要求:包含一个对象属性,且用_(单下划线)命名的
定义一个类方法(装饰器)
定义一个静态方法(装饰器)
定义委托属性(三个类装饰器): 可以访问_命名的属性的值
可以修改_命名的属性的值
可以删除_命名的属性
执行:
实例一个对象
调用类方法(类和对象两种方式)
调用静态方法(类和对象两种方式)
对象.委托属性
对象.委托属性 = value
del 对象.委托属性

class Today:

    def __init__(self):
        self._data = None

    @staticmethod
    def static_method(*args, **kwargs):
        print("This is static method")

    @classmethod
    def class_method(cls):
        print("This is class method")

    @property   #委托属性data.   property:只能提供访问
    def data(self):
        return self._data

    @data.setter   #委托属性的修改:xxx.setter
    def data(self, value):
        self._data = value

    @data.deleter   #委托属性的删除:xxx.deleter
    def data(self):
        del self._data

today = Today()
#调用静态方法:类.方法/对象.方法
Today.class_method()
Today.static_method()
today.class_method()
today.static_method()

print(today.data)

today.data = "data"
print(today.data)



'''
This is class method
This is static method
This is class method
This is static method
None
data
'''

  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
闭包装饰器是一种特殊的装饰器,它使用闭包的概念来实现。闭包是指一个函数可以访问并操作其外部函数中定义的变量。在Python中,闭包装饰器可以用于给函数添加额外的功能,同时保持函数的原始定义不变。 引用中的示例展示了装饰器传参的形式。在这个例子中,outer函数是一个装饰器,它将inner函数作为子函数返回,并在inner函数中添加了额外的功能。通过使用@outer装饰器语法,我们可以在add函数上应用outer装饰器,从而在调用add函数时执行装饰器中的代码。 引用中的示例展示了多层装饰器的使用。在这个例子中,outer1和outer2函数分别是两个装饰器,他们都返回一个inner函数。通过使用@outer1和@outer2装饰器语法,我们可以在outers函数上应用这两个装饰器,并在调用outers函数时按照装饰器的定义顺序执行相关的代码。 引用提供了关于Python闭包装饰器的使用方法的总结。这篇文章通过示例代码详细介绍了闭包装饰器的使用,对于学习和工作有一定的参考价值。 引用中的示例展示了装饰器的形式。在这个例子中,outer函数是一个装饰器,它将inner函数作为子函数返回,并在inner函数中添加了额外的功能。通过使用@outer装饰器语法,我们可以在add函数上应用outer装饰器,从而在调用add函数时执行装饰器中的代码。 综上所述,Python闭包装饰器是一种利用闭包概念实现的特殊装饰器,可以用于给函数添加额外的功能。这种装饰器可以通过装饰器传参的形式、多层装饰器的形式或普通的装饰器形式来实现。<span class="em">1</span><span class="em">2</span><span class="em">3</span><span class="em">4</span>
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值