猪行天下之Python基础——5.2 函数(下)(下)

简介: 内容简述: 1、迭代器 2、生成器 3、装饰器

③ 多个装饰器的执行顺序


一个函数可以搭配多个修饰器使用,执行的顺序:「从下往上,就近原则,靠近函数定义的先执行」。验证代码示例如下:


def func_a(func):
    def decorator():
        func()
        print("Call func_a")
return decorator
def func_b(func):
    def decorator():
        func()
        print("Call func_b")
return decorator
def func_c(func):
    def decorator():
        func()
        print("Call func_c")
return decorator
@func_a
@func_b
@func_c
def func_t():
pass
if __name__ == '__main__':
    func_t()


运行结果如下


Call func_c
Call func_b
Call func_a


④ 四种不同类型的装饰器


Python中有四种不同类型的装饰器,分别是:「函数装饰函数」「函数装饰类」「类装饰函数


类装饰类」, 和类有关的装饰器可以等后面学完类和对象再回头看,不用死记,用到的时候


照葫芦画瓢改改就好。另外类装饰函数或类主要依赖类的__call__函数,当使用@形式将装饰器 附加到函数上时,就会调用该函数。


  • 函数装饰函数」,使用代码示例如下:


def func_func(func):
    def decorator(a, b):
        print("函数装饰的函数名:", func.__name__)
        result = func(a, b)
        return result
return decorator
@func_func
def func_add(a, b):
return a + b
if __name__ == '__main__':
    print(func_add(1, 2))


运行结果如下

函数装饰的函数名: func_add
3


  • 函数装饰类」,使用代码示例如下:


def func_class(cls):
    def decorator(name):
        print("函数装饰的类:", cls.__name__, name)
        return cls(name)
return decorator
@func_class
class A:
    def __init__(self, n):
        self.n = n
    def show(self):
        print("a = " + self.n)
a = A('123')
a.show()


运行结果如下


函数装饰的类: A 123
a = 123


  • 类装饰函数」,使用代码示例如下:


class class_func:
    def __init__(self, _func):
        self._func = _func
    def __call__(self, name):
        print("类装饰的函数名:", self._func.__name__, name)
        return self._func(name)
@class_func
def func(a):
    return a
if __name__ == '__main__':
    print(func('123'))


运行结果如下


类装饰的函数名: func 123
123


  • 类装饰类」,使用代码示例如下:


class class_class:
    def __init__(self, _cls):
        self._cls = _cls
    def __call__(self, name):
        print("类装饰的类的类名:", self._cls.__name__, name)
        return self._cls(name)
@class_class
class A:
    def __init__(self, a):
        self.a = a
    def show(self):
        print('self.a = ', self.a)
if __name__ == '__main__':
    a = A('123')
    a.show()


运行结果如下


类装饰的类的类名: A 123
self.a =  123


相关文章
|
5天前
|
设计模式 缓存 监控
Python装饰器:优雅增强函数功能
Python装饰器:优雅增强函数功能
181 101
|
12天前
|
缓存 测试技术 Python
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
162 99
|
12天前
|
存储 缓存 测试技术
Python装饰器:优雅地增强函数功能
Python装饰器:优雅地增强函数功能
143 98
|
17天前
|
缓存 Python
Python中的装饰器:优雅地增强函数功能
Python中的装饰器:优雅地增强函数功能
|
3月前
|
PHP Python
Python format()函数高级字符串格式化详解
在 Python 中,字符串格式化是一个重要的主题,format() 函数作为一种灵活且强大的字符串格式化方法,被广泛应用。format() 函数不仅能实现基本的插入变量,还支持更多高级的格式化功能,包括数字格式、对齐、填充、日期时间格式、嵌套字段等。 今天我们将深入解析 format() 函数的高级用法,帮助你在实际编程中更高效地处理字符串格式化。
273 0
|
2月前
|
Python
Python 函数定义
Python 函数定义
110 1
|
24天前
|
算法 安全 数据安全/隐私保护
Python随机数函数全解析:5个核心工具的实战指南
Python的random模块不仅包含基础的随机数生成函数,还提供了如randint()、choice()、shuffle()和sample()等实用工具,适用于游戏开发、密码学、统计模拟等多个领域。本文深入解析这些函数的用法、底层原理及最佳实践,帮助开发者高效利用随机数,提升代码质量与安全性。
123 0
|
2月前
|
数据挖掘 数据处理 C++
Python Lambda:从入门到实战的轻量级函数指南
本文通过10个典型场景,详解Python中Lambda匿名函数的用法。Lambda适用于数据处理、排序、条件筛选、事件绑定等简洁逻辑,能提升代码简洁性和开发效率。同时提醒避免在复杂逻辑中过度使用。掌握Lambda,助你写出更高效的Python代码。
123 0
|
3月前
|
索引 Python 容器
[oeasy]python096_列表_计数函数_count
本教程详细介绍了Python中列表的计数方法`count`,包括其基本用法、与`len`函数的区别,以及如何结合索引操作查找和删除特定元素。同时探讨了字符串对象的`count`方法,并通过实例演示了如何统计字符出现次数。
68 7
|
3月前
|
机器学习/深度学习 数据处理 索引
Python内置函数:面试通关的49个秘密武器
本文精选49个Python高频面试内置函数,涵盖数值处理、类型转换、序列操作、字典集合、函数式编程及高级特性,结合真实代码案例解析底层逻辑与应用场景,助你提升开发效率,轻松应对技术面试。
64 1

推荐镜像

更多