当前位置: 首页 > news >正文

Python学习入门(1)——基础语句(二)

14. 迭代器和迭代协议

        在Python中,迭代器是支持迭代操作的对象,即它们可以一次返回其成员中的一个。任何实现了 __iter__()__next__() 方法的对象都是迭代器。

class Count:def __init__(self, low, high):self.current = lowself.high = highdef __iter__(self):return selfdef __next__(self):if self.current > self.high:raise StopIterationelse:self.current += 1return self.current - 1# 使用迭代器
for number in Count(1, 5):print(number)

15. 生成器

        生成器是一种特殊的迭代器,可以更方便地使用简单的函数来创建。通过使用关键字 yield,函数在每次生成值时将挂起其状态。

def countdown(n):while n > 0:yield nn -= 1# 使用生成器
for i in countdown(5):print(i)

16. 装饰器的进阶用法

        装饰器可以用来修改其他函数的行为,而且可以堆叠、参数化。

def decorator_with_args(number):def my_decorator(func):def wrapper(*args, **kwargs):print("Something is happening before the function is called.")result = func(*args, **kwargs)print("Something is happening after the function is called.")return result * numberreturn wrapperreturn my_decorator@decorator_with_args(3)
def add(x, y):return x + yprint(add(2, 3))

17. 异步编程(asyncio

        Python的 asyncio 模块用于编写单线程并发代码使用协程,适用于IO密集型应用。

import asyncioasync def main():print('Hello')await asyncio.sleep(1)print('world')asyncio.run(main())

18. 类型注解

        Python从3.5版本开始引入了类型提示(type hints),用于指示变量和函数参数、返回值的类型,有助于代码的可读性和可维护性。

from typing import List, Dictdef greet_all(names: List[str]) -> None:for name in names:print(f"Hello, {name}")greet_all(["Alice", "Bob", "Charlie"])

19. 元编程

        元编程是指在运行时创建或自定义代码的技术。Python提供了多种元编程工具,包括元类和装饰器。

元类(Metaclasses)

        元类是创建类的类,它们允许你拦截Python的类构造过程。通过定义一个元类,你可以修改类的定义。

class Meta(type):def __new__(cls, name, bases, class_dict):print("A class is defined with name:", name)return type.__new__(cls, name, bases, class_dict)class MyClass(metaclass=Meta):pass# 输出: A class is defined with name: MyClass

20. 动态属性和方法

        Python支持在运行时动态地添加或修改对象和类的属性和方法,这增加了代码的灵活性。

class DynamicClass:pass# 动态添加属性
obj = DynamicClass()
obj.new_attr = "Hello"
print(obj.new_attr)# 动态添加方法
import types
def dynamic_method(self):return "Dynamic Method Called"obj.dynamic_method = types.MethodType(dynamic_method, obj)
print(obj.dynamic_method())

21. 上下文管理器的高级用法

        除了基本的 with 语句用法外,你可以创建支持复杂逻辑的自定义上下文管理器。

class ManagedResource:def __enter__(self):print("Enter resource")return selfdef __exit__(self, exc_type, exc_val, exc_tb):print("Exit resource")if exc_type:print(f"An error occurred: {exc_val}")return True  # Suppress exceptionswith ManagedResource():raise Exception("Something went wrong!")
# Enter resource
# Exit resource
# An error occurred: Something went wrong!

22. 多进程与多线程

        Python支持多线程和多进程编程,这对于提高IO密集型和计算密集型应用的性能非常重要。

多进程
from multiprocessing import Processdef print_func(continent='Asia'):print('The name of continent is : ', continent)if __name__ == "__main__":  # Required for Windowsnames = ['America', 'Europe', 'Africa']procs = []proc = Process(target=print_func)  # Create a Processprocs.append(proc)proc.start()# Create a process for each namefor name in names:proc = Process(target=print_func, args=(name,))procs.append(proc)proc.start()# Complete the processesfor proc in procs:proc.join()
多线程
import threadingdef print_cube(num):print("Cube: {}".format(num * num * num))def print_square(num):print("Square: {}".format(num * num))if __name__ == "__main__":t1 = threading.Thread(target=print_square, args=(10,))t2 = threading.Thread(target=print_cube, args=(10,))t1.start()t2.start()t1.join()t2.join()

http://www.lryc.cn/news/337756.html

相关文章:

  • vue 百度地图 使用 vue-baidu-map 进行当前位置定位和范围展示
  • 使用idea运行程序,发现控制台的中文出现乱码
  • 基于javassm实现的大学生兼职信息系统
  • O2OA开发平台如何查看数据表结构?
  • 心理测评性格测试矩阵版h5微信抖音QQ快手小程序app开源版开发
  • 【蓝桥杯】十六进制转八进制 C++实现
  • 明明设置数字居中对齐,为什么excel的数字却不居中?
  • 深入解析API技术:原理、实现与应用
  • C语言——数组指针变量
  • Redis的过期策略与内存淘汰机制原理及实践
  • 【24届数字IC秋招总结】提前批面试经验1——小米、百度昆仑芯、长鑫存储
  • 第7章、ReactRedux 实战 - 登录注册验证;
  • 16路HDMI+AV流媒体IPTV高清编码器JR-3216HD
  • vscode 配置文件settings.json和c_cpp_properties.json的作用
  • 【postgresql 基础入门】入门教程成形了,八大章节,涵盖库,表,事务,约束,数据类型,聚集函数,轻松入门
  • 【计算机毕业设计】人事管理系统——后附源码
  • OceanBase V4.2 MySQL模式下,如何通过DBLINK实现跨数据源访问
  • 再谈C语言——理解指针(一)
  • day21-二叉树part08
  • 【WPF应用42】WPF中的 GroupBox 控件详解
  • LeetCode-72. 编辑距离【字符串 动态规划】
  • 多张静图合成gif怎么做?一键极速合成gif
  • Es中bool 查询中的四个(must must_not should filter)
  • Docker容器嵌入式开发:Docker Ubuntu18.04配置mysql数据库
  • C++类和对象中上篇
  • 基于linux进一步理解核间通讯
  • 应用实战|从头开始开发记账本2:基于模板快速开始
  • 学习前端第二十天(条件分支:if 和 ‘?‘;逻辑运算符)
  • C++11的更新介绍(lamada、包装器)
  • Golang 实现一个简单的 RPC 服务