python迭代器 生成器 装饰器 异常处理 with-as作用

2015-04-12 19:16:00
admin
原创 33
摘要:python迭代器 生成器 装饰器 异常处理 with-as作用

一、迭代器

1、获取数据通过next(),获取不到数据抛出异常StopIteration;

2、chain组合多个迭代器为单一迭代器,是一个惰性的迭代器;


二、生成器

1、生成器generator,迭代器iterator,生成器是一种特殊的迭代器;

2、yield把函数变成一个生成器函数,yield执行一次返回一次数据;

3、(... for ... in ...)是生成器表达式,python自动把它做成生成器;

4、生成器能够保存函数的执行位置,函数的局部变量;

5、每次迭代时从上次执行的位置继续执行;


三、装饰器

1、英文帮助:https://book.pythontips.com/en/latest/decorators.html

2、中文帮助:https://eastlakeside.gitbook.io/interpy-zh/decorators

3、python函数也是一种对象,函数中可以定义函数;

4、函数参数可以是函数,函数返回值可以是函数;

5、func=decorator(originfunc),originfunc原函数,decorator装饰函数,func结果函数;

6、@decorator简化生成装饰函数,@functools.wraps(orignfunc)修改结果函数的名字和注释;

7、装饰器可以在不修改原有函数的情况下,给函数增加新的功能,比如验证权限、记录日志;


@property:

1、@property设置属性的读取方法,以属性方式读取一个变量;

2、@xxx.setter设置属性的写入方法,以属性方式写入一个变量;
3、@xxx.deleter设置属性的删除方法,以属性方式删除一个变量;

4、操作成员:优先调用成员的方法__get__、__set__、__delete__,这里访问的是成员的方法;

5、操作成员:如果上述方法不存在,操作对象的字典obj.__dict__,这里访问的是对象的成员;

6、@property装饰器使用了上述操作成员的机制;


四、异常处理

1、异常使用帮助:https://www.w3schools.com/python/python_try_except.asp

2、异常组改进提案:https://peps.python.org/pep-0654

3、except用于处理异常,参数是一个异常;

4、except*用于处理异常组,参数是一个异常组;

5、except*参数异常组包含指定异常类型的一个或多个实例;

6、except和except*不能混合使用,要么全都是except,要么全都是excpet*;

7、异常只能命中一个except,异常组可以命中多个except*,直到异常组所有异常被处理;

8、继承关系:ExceptionGroup -> BaseExceptionGroup -> Exception -> BaseException -> object

9、继承关系:SystemExit -> BaseException,KeyboardInterrupt -> BaseException


推荐第一种异常抛出方式:

raise Exception('password incorrect')

raise Exception,'password incorrect'
raise Exception,('password incorrect')


异常处理:

try:
    pass
except Exception as e:
    print e


异常组处理:

try:
    raise ExceptionGroup(
        "error messages",
        [ValueError("Invalid value"), TypeError("Wrong type")]
    )
except* ValueError as eg:
    print(f"Handled ValueError: {eg.exceptions}")
except* TypeError as eg:
    print(f"Handled TypeError: {eg.exceptions}")


五、with-as作用

1、上下文管理器:https://docs.python.org/zh-cn/3.14/library/stdtypes.html#context-manager-types

2、同步场景:自动调用上下文管理器的__enter__和__exit__方法,用于对象的自动初始化和自动清理;

3、异步场景:自动调用上下文管理器的__aenter__和__aexit__方法,用于对象的自动初始化和自动清理;

with open("/tmp/foo.txt") as myfile:
    data = myfile.read()

发表评论
评论通过审核之后才会显示。