0%

Python进阶

python类特殊方法

  1. __init__ 和 __new__

    init方法不是类的构造方法,其作用是返回实例,new方法才是类的构造方法,通过继承object类重写改方法

  2. __enter__ 和 __exit__

    enter作用是初始化后返回实例,exit作用是退出with语句后做处理,例如清理内存,关闭文件,删除冗余等

  3. __str__ 和 __repr__

    str方法是用于将实例的信息以字符串的形式输出,repr方法与str作用相同,不同在于repr方法用于交互式环境调试

  4. __setattr__ 、__getattr__、__getattribute__ 、__delattr__

    setattr用于设置属性,getattr用于获取不存在的属性,getattribute用于访问存在的属性,delattr用于删除属性

迭代器和生成器

  • 迭代器:可迭代对象皆为迭代器,用户自定义对象通过实现iter方法和next方法实现迭代器。
  • 生成器:特殊的迭代器,更节省内存(call for need)

*args和**kwargs

  • *args:表示多个无名参数,返回其组成的tuple
  • **kwargs:表示key=value关键字型参数,返回一个dict

装饰器

  1. 普通装饰器:

    1
    2
    3
    4
    5
    def my_decoration(func):  # 装饰器
    def wrapper(*args, **kwargs):
    print("{} is running.".format(func__name__))
    return func(*args, **kwargs) # 返回被包装函数
    return wrapper # 返回包装函数
  2. 带参数的装饰器:

    1
    2
    3
    4
    5
    6
    7
    8
    def use_param(level):  # 带参数的装饰器
    def my_decoration(func): # 内部装饰器
    def wrapper(*args, **kwargs):
    print("{} is running.".format(func.__name__))
    print("this level is {}".format(level))
    return func(*args, **kwargs) # 返回被包装函数
    return wrapper # 返回包装函数
    return my_decoration # 返回装饰器
  3. 类装饰器:

    1
    2
    3
    4
    5
    6
    7
    class Foo:  # 类装饰器
    def __init__(self, func):
    self._func = func
    def __call__(self):
    print("this is class decorator.")
    self._func()
    print("ending...")
  4. functools.wraps:

    1
    2
    3
    4
    5
    6
    7
    from functools import wraps
    def my_decoration(func):
    @wraps(func) # 负责保护原函数的doc和name的装饰器
    def wrapper(*args, **kwargs):
    ...
    return func(*args, **kwargs)
    return wrapper
  5. 装饰器的执行顺序:

    1
    2
    3
    4
    5
    @d1
    @d2
    @d3
    def func():
    ...

    等价于func = d1(d2(d3(func)))

  6. 内部装饰器

    • @staticmethod: 将类中函数修饰为静态方法不需要额外的参数(self等),不能访问类中的参数
    • @classmethod: 函数必须包含一个类参数cls,返回一个实例,可访问类中的成员
    • @property: 将函数作为类的属性,进而使函数拥有setter方法和deletter方法,其本身是getter方法
  7. 协程、多线程、多进程

    • async
    • threading
    • multiprocessing

本文标题:Python进阶

文章作者:SkecisAI

发布时间:2020年04月27日 - 09:43:11

最后更新:2020年04月27日 - 09:48:49

原始链接:http://www.skecis.top/2020/04/27/python进阶/

许可协议: 署名-非商业性使用-禁止演绎 4.0 国际 转载请保留原文链接及作者。

感谢你的支持,希望本文能助你一臂之力。