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

1.什么是闭包?闭 包的特征?

  闭 包的作用:

 1.隐藏一些不需要暴露给外部使用的变量,减少变量被修改或出错的可能性

  闭 包的要点:

 1.存在嵌套函数

 2.将内部函数作为返回值返回

 3.内部函数使用了外部函数的变量

例如: 传入10 ->输出10
传入15 ->输出25
传入20 ->输出45

def func():
    num = []

    def my(n):
        num.append(n)
        return sum(num)

    return my


my = func()
print(my(10))
print(my(15))
print(my(20))

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))

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)

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值