Web渗透和杂项学习概况(第三周)5.29
5.28续 Python进阶语法
七、异步编程
异步编程使用asyncio模块,适用于高并发的I/O密集型任务。核心概念包括:协程、事件循环、任务和Future。
定义异步函数使用async def关键字,调用异步函数不会立即执行,而是返回一个协程对象。在异步函数内部使用await关键字等待另一个异步操作完成,此时事件循环可以切换到其他协程执行。
运行异步代码需要创建事件循环。使用asyncio.run()是推荐的入口方式,它会创建事件循环、运行协程直到完成并清理循环。asyncio.create_task用于将协程封装成任务,使其可以并发执行。asyncio.gather用于同时等待多个异步任务完成。
异步上下文管理器使用async with,异步迭代器使用async for。这些模式用于处理需要异步等待的进入和退出操作,或者异步遍历数据流。
与基于回调的异步相比,async/await语法让异步代码看起来像同步代码,更易于理解和维护。
八、类型注解
Python 3.5开始支持类型注解,允许在代码中标注变量、参数和返回值的预期类型。类型注解不会影响运行时行为,主要用于代码提示、静态检查和文档说明。
变量类型注解格式是变量名冒号空格类型,如name: str。函数参数注解在参数名后冒号加类型,返回值注解在参数括号后用箭头加类型。
typing模块提供了丰富的类型工具:List、Dict、Tuple、Set用于容器类型;Optional表示可以是None;Union表示可以是多种类型之一;Any表示任意类型;Callable表示可调用对象。类型变量(TypeVar)用于泛型函数。
如果类型是自身类的实例,需要前向引用时可以用字符串形式的类型名。从Python 3.7开始可以使用from future import annotations实现延迟注解求值。
类型检查工具如mypy可以根据类型注解静态分析代码,提前发现类型相关的潜在错误。
九、属性与描述符
property装饰器将方法转换为属性访问,使得可以在获取、设置或删除属性时执行自定义逻辑。更精确的控制可以使用property()函数,分别指定getter、setter和deleter。
描述符是实现了__get__、set、__delete__方法的类,用于管理另一个类的属性访问。当一个类的属性是描述符实例时,对该属性的访问会被描述符的方法拦截。
描述符分为数据描述符(实现了__set__或__delete__)和非数据描述符(只实现了__get__)。数据描述符的优先级高于实例属性,而非数据描述符的优先级低于实例属性。
描述符是Python中许多底层功能的基础,比如方法绑定、classmethod、staticmethod、property等。理解描述符有助于深入理解Python的属性访问机制。
十、模块与包的高级特性
相对导入使用点号表示当前目录,双点号表示父目录,用于包内部的模块相互导入。但相对导入只能在包内部使用,不能作为脚本直接运行。
all__变量定义在模块顶部,是一个字符串列表,指定当使用from module import *时应该导入哪些名称。如果不定义__all,默认导入所有不以下划线开头的名称。
__name__属性:当模块被直接运行时,__name__的值为"main";当模块被导入时,__name__的值为模块名。这个特性常用于编写既可以被导入又可作为脚本执行的代码。
包的__init__.py文件在包被导入时执行,可以用于初始化包级别的变量、导入子模块、定义__all__列表控制from package import *的行为。从Python 3.3开始,init.py不再是必需的,没有该文件的目录称为命名空间包。
动态导入可以使用importlib模块的import_module函数,根据字符串形式的模块名导入模块,适合实现插件系统。
十一、魔术方法
魔术方法是类中以双下划线开头和结尾的特殊方法,用于定义类的行为。常见的有:
对象生命周期:__new__控制实例创建,__init__初始化实例,__del__对象被销毁时调用。
字符串表示:__str__定义str()和print的输出,__repr__定义repr()输出,通常repr用于调试应尽可能准确。
容器模拟:__len__返回长度,__getitem__通过索引获取元素,__setitem__通过索引赋值,__delitem__删除元素,__contains__定义in运算符的行为。
运算符重载:__add__定义加法,__sub__减法,__eq__等于,__lt__小于等等。
可调用对象:__call__使类的实例可以像函数一样被调用。
属性访问:__getattr__在访问不存在的属性时调用,__setattr__在任何属性赋值时调用,__delattr__删除属性时调用。注意使用这些方法时要避免无限递归。
上下文管理器:enter__和__exit。
迭代器:iter__和__next。
十二、其他进阶特性
functools模块提供了许多高阶函数工具:partial固定函数的部分参数生成新函数,lru_cache实现函数结果的缓存,wraps用于装饰器内保留原函数的元信息。
itertools模块提供了高效的迭代器工具:count无限计数,cycle无限循环,repeat重复元素,chain连接多个迭代器,product计算笛卡尔积,permutations生成排列,combinations生成组合。
collections模块提供了扩展的容器类型:namedtuple生成带字段名的元组,defaultdict提供默认值的字典,Counter用于计数,deque双端队列高效在两端添加和删除元素。
弱引用(weakref)允许引用对象而不增加引用计数,不会阻止对象被垃圾回收,用于解决循环引用问题和实现缓存机制。
数据类(dataclasses)装饰器自动生成__init__、repr、__eq__等样板代码,减少手动编写数据容器类的繁琐工作
AtomGit 是由开放原子开源基金会联合 CSDN 等生态伙伴共同推出的新一代开源与人工智能协作平台。平台坚持“开放、中立、公益”的理念,把代码托管、模型共享、数据集托管、智能体开发体验和算力服务整合在一起,为开发者提供从开发、训练到部署的一站式体验。
更多推荐



所有评论(0)