目录
1 Python中函数的输入参数类型:
2 python 第一个方法参数 selt cls
3 类和面向对象
4 Python 中__init__.py 作用
5 python 元类与装饰器
元类与装饰器https://blog.csdn.net/qq_52213943/article/details/145175689?spm=1001.2014.3001.5506
6 设计模式
7 python 线程池
1 Python中函数的输入参数类型:
-
位置参数(Positional Arguments):这是最常见的参数类型,按照顺序传递参数。例如,在函数定义中,第一个参数是
a
,第二个参数是b
,调用时必须按照这个顺序传递值。如果调用时少传了一个参数,程序会报错12。 -
默认参数(Default Arguments):在函数定义时可以为参数指定一个默认值。如果在调用函数时没有提供该参数的值,则使用默认值。例如,函数
test(name, message='Boy')
中,如果调用时没有提供message
参数,则使用默认值'Boy'12。 -
关键字参数(Keyword Arguments):这种参数通过名称传递,允许在调用函数时指定参数名,这使得参数的顺序可以与声明时不同,增加了代码的可读性。例如,
function(a=2, b=3)
即使a
和b
的顺序与定义时不同,也能正确传递值24。 -
可变位置参数(Arbitrary Positional Arguments):通过在参数前加一个星号
*
来实现,可以接收任意数量的位置参数。例如,def function(*args): return sum(args)
可以接收任意数量的位置参数25。 -
可变关键字参数(Arbitrary Keyword Arguments):通过在参数前加两个星号
**
来实现,可以接收任意数量的关键字参数。例如,def function(**‌kwargs): return kwargs
可以接收任意数量的关键字参数25。
2 python 第一个方法参数 selt cls
-
类方法使用
@classmethod
并接收cls
参数。 -
静态方法使用
@staticmethod
并不接收cls
或self
参数。 -
实例方法自动接收
self
参数,用于访问实例属性和方法。
3 类和面向对象
1. __init__
构造方法
构造方法是一个特殊方法,用于在对象创建时自动调用,通常用于初始化实例变量。
2. __str__
:定义对象的字符串表示
当使用 print()
或 str()
输出对象时,会调用 __str__
方法,返回人类可读的字符串。
3.
__eq__
用于比较两个对象是否相等。
4 .__repr__
返回对象的详细信息,主要用于调试。
5.
类方法 和 静态方法 是与普通方法不同的两种方法类型:类方法(@classmethod):操作类级别的数据,接收 cls 参数表示类本身。静态方法(@staticmethod):不依赖类或对象,只是与类相关的工具函数。
6 .__subclasses__
根据父类获取所有子类
在Python中,如果你想从父类获取所有子类,可以通过使用__subclasses__()
方法。这个方法会返回一个列表,其中包含了该类的所有直接子类。但是,如果你想获取所有子类,包括间接子类(即孙子类、重孙子类等),你需要递归地调用这个方法。
class Parent:
pass
class Child1(Parent):
pass
class Child2(Parent):
pass
# 获取Parent的直接子类,注意 孙子类,还需要继续迭代
print(Parent.__subclasses__()) # 输出: [<class '__main__.Child1'>, <class '__main__.Child2'>]
4 Python 中__init__.py 作用
在 Python 中,__init__.py 文件是用于定义 包(Package) 的特殊文件。它的存在告诉 Python 解释器,该目录应被视为一个包。__init__.py 文件可以是空的,也可以包含初始化代码或定义包的属性和方法。
__init__.py 的作用
标识包:
如果一个目录中包含 __init__.py 文件,Python 会将其视为一个包。
没有 __init__.py 的目录会被视为普通目录,无法通过包的方式导入。
初始化包:
__init__.py 文件在包被导入时自动执行,可以用于初始化包或设置包级别的变量。
定义包的接口:
可以在 __init__.py 中导入模块或子包,简化用户导入包时的操作。
控制包的导入行为:
通过 __all__ 变量,可以控制使用 from package import * 时导入哪些模块。
5 python 元类与装饰器
元类与装饰器
https://blog.csdn.net/qq_52213943/article/details/145175689?spm=1001.2014.3001.5506
class ModelRegistry:
_registry = {}
@classmethod
def register_model(cls, name):
def decorator(model_cls):
cls._registry[name] = model_cls
return model_cls
return decorator
# 使用装饰器注册模型
@ModelRegistry.register_model(name='resnet')
class ResNet:
pass
@ModelRegistry.register_model(name='densenet')
class DenseNet:
pass
6 设计模式
23种设计模式,注解一般是用装饰器模式实现
7 python 线程池
在Python中,线程池是一种用于管理和复用线程的机制,可以有效地执行并发任务。`concurrent.futures` 模块提供了 `ThreadPoolExecutor` 类,用于创建和管理线程池。
from concurrent.futures import ThreadPoolExecutor
with ThreadPoolExecutor(max_workers=5) as executor:
future = executor.submit(function, *args, **kwargs)
#`function` 是要执行的函数,`*args` 和 `**kwargs` 是传递给函数的参数。
result = future.result()
### 示例代码
以下是一个简单的示例,展示了如何使用 `ThreadPoolExecutor` 来并发执行多个任务:
from concurrent.futures import ThreadPoolExecutor
import time
def task(name):
print(f"Task {name} started")
time.sleep(2) # 模拟耗时操作
print(f"Task {name} finished")
return f"Result from {name}"
# 创建线程池,最多同时运行3个线程
with ThreadPoolExecutor(max_workers=3) as executor:
# 提交任务到线程池
futures = [executor.submit(task, f"Task-{i}") for i in range(5)]
# 获取任务结果
for future in futures:
print(future.result())
print("All tasks completed")