• Python3高级用法综合举例


    [本文出自天外归云的博客园]

    举例

    下面代码围绕一个Student类综合举例说明装饰器、生成器、动态获取/添加类成员、列表推导式、reduce函数、lambda表达式的实际应用:

    from functools import reduce
    
    def show(func):
        def wrapper(_object):
            print([i for i in func(_object)])
        return wrapper
    
    @show
    def generator(_object):
        for attr in _object.__dict__:
            yield(attr,_object.__dict__[attr])
    
    class Student(object):
        def __init__(self, **kwargs):
            for key,value in kwargs.items():
                if not hasattr(self,key):
                    setattr(self,key,value)
    
        def show_info(func):
            def wrapper(self):
                print(func(self))
            return wrapper
    
        @show_info
        def info(self):
            info = [str(k)+":"+str(v) for k, v in self.__dict__.items()]
            return reduce((lambda x,y:x+" "+y), info)
    
    if __name__ == '__main__':
        s = Student(score=1,name="asdfa",school="anda")
        generator(s)
        s.score=11
        s.info()

    这个Student类的功效是:可以动态的添加任意数量的成员变量,并且提供信息打印的方法。

    运行结果:

    高级用法简介

    1. 装饰器:通过函数嵌套的方式,以被装饰函数作为装饰器函数入参,用函数修饰函数的一种方法。上面代码中的show和show_info函数都是装饰器;

    2. 生成器:通过for循环调用yield函数生产出一个可迭代的结果集,可以将生成器看成一个生产者。上面的代码中generator就是一个生产者,他的修饰器函数show中对他的生产结果进行了消费。可以把show函数理解为消费者;

    3. 动态获取/添加类成员:分别是上面代码中的hasattr函数和setattr函数;

    4. 列表推导式:一种for循环生成列表的pythonic写法,如上面代码中show函数中print的部分和show_info函数中的info的值的部分都用到了列表推导式;

    5. 函数reduce:这个函数可以结合lambda表达式来使用,按照lambda表达式中定义的规则对列表中的所有元素进行运算并返回一个值;

    6. 表达式lambda:一个lambda表达式就代表一个匿名函数,如上面代码中reduce函数中的部分,定义了一个入参为x和y,函数体为x+" "+y的匿名函数,这个函数体的计算结果也是lambda表达式的返回值。

    另外:

    1. 需要从数据结构两端取数据或append的时候可以用from collections import deque,双向队列;

    2. 自省对象的方法有inspect和dir。

    学习更多python高级用法,推荐阅读:

    《Python进阶》中文版

  • 相关阅读:
    [图论分块] HDU 4858 项目管理
    pytorch 自定义权重变量初始化
    Linux系统下命令静默安装weblogic12c
    第六章 类文件结构(2)
    第六章 类文件结构(1)
    第三章 垃圾收集器与内存分配策略
    第二章(3)实战: OutOfMemoryError异常
    第二章(2)HotSpot虚拟机对象探秘
    第二章(1) Java内存区域与内存溢出异常
    第一章 走进java
  • 原文地址:https://www.cnblogs.com/LanTianYou/p/8067428.html
Copyright © 2020-2023  润新知