0
点赞
收藏
分享

微信扫一扫

Python零基础从小白打怪升级中~~~~~~~字符串+列表+元祖

小北的爹 2024-04-12 阅读 26

14. 迭代器和迭代协议

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

class Count:
    def __init__(self, low, high):
        self.current = low
        self.high = high

    def __iter__(self):
        return self

    def __next__(self):
        if self.current > self.high:
            raise StopIteration
        else:
            self.current += 1
            return self.current - 1

# 使用迭代器
for number in Count(1, 5):
    print(number)

15. 生成器

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

def countdown(n):
    while n > 0:
        yield n
        n -= 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 * number
        return wrapper
    return my_decorator

@decorator_with_args(3)
def add(x, y):
    return x + y

print(add(2, 3))

17. 异步编程(asyncio

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

import asyncio

async def main():
    print('Hello')
    await asyncio.sleep(1)
    print('world')

asyncio.run(main())

18. 类型注解

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

from typing import List, Dict

def 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 self

    def __exit__(self, exc_type, exc_val, exc_tb):
        print("Exit resource")
        if exc_type:
            print(f"An error occurred: {exc_val}")
        return True  # Suppress exceptions

with ManagedResource():
    raise Exception("Something went wrong!")
# Enter resource
# Exit resource
# An error occurred: Something went wrong!

22. 多进程与多线程

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

多进程
from multiprocessing import Process

def print_func(continent='Asia'):
    print('The name of continent is : ', continent)

if __name__ == "__main__":  # Required for Windows
    names = ['America', 'Europe', 'Africa']
    procs = []
    proc = Process(target=print_func)  # Create a Process
    procs.append(proc)
    proc.start()

    # Create a process for each name
    for name in names:
        proc = Process(target=print_func, args=(name,))
        procs.append(proc)
        proc.start()

    # Complete the processes
    for proc in procs:
        proc.join()
多线程
import threading

def 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()
举报

相关推荐

0 条评论