Python
-
__new__
方法:主要用于控制对象的创建过程,它可以在内存中为对象分配空间,并返回对象的引用。
__init__
方法则用于对已创建的对象进行初始化操作。__new__
方法在__init__
方法之前被调用,它负责创建对象并决定是否返回该对象的实例。如果__new__
方法不返回实例,则__init__
方法不会被调用。单例写法:
def __new__(cls, obj=None, role=None): if Config._instance is None: Config._instance = object.__new__(cls) return Config._instance
-
self.dict:
self.__dict__
在 Python 中是一个特殊的属性。对于一个对象(这里的
self
通常代表类的实例),它包含了该对象所具有的所有属性(包括数据属性和方法)及其对应的值,以字典的形式呈现。通过操作
self.__dict__
,可以动态地添加、修改或删除对象的属性。 -
glob():
glob
是 Python 中的一个标准库模块,用于查找符合特定规则的文件路径名。它支持使用通配符来匹配文件和目录名称,常见的通配符包括*
(匹配零个或多个字符)、?
(匹配单个字符)和()
(匹配指定范围内的字符)。 -
Path(_path_)与os.path.abspath的区别
pathlib.Path
提供了一种面向对象的、更直观和现代化的方式来处理路径,而os.path
中的函数则是传统的处理路径的方式。 在实际使用中,如果您更倾向于使用面向对象的方式并且希望利用pathlib
提供的一些便捷方法,可能会选择Path(__path__)
,如Path.parent。如果您习惯了传统的os.path
模块的函数调用方式,或者需要与一些依赖于os.path
的旧代码兼容,可能会使用os.path.abspath
-
调用方法前加上**
在 Python 中,在调用函数或方法时,在参数前加上
**
用于将一个字典解包为关键字参数。 例如,如果有一个函数func(a, b, c)
,并且有一个字典params = {'a': 1, 'b': 2, 'c': 3}
,那么可以这样调用函数:func(**params)
,这相当于func(a=1, b=2, c=3)
。 这在需要将字典中的键值对作为函数的关键字参数传递时非常有用。 -
lamda函数
在 Python 中,
lambda
函数是一种匿名函数,即没有名称的函数。lambda
函数的语法非常简洁,通常用于创建简单的、一次性使用的函数。以下是一个示例:square = lambda x: x ** 2 print(square(5))
在上述示例中,
lambda x: x ** 2
定义了一个接受一个参数x
并返回其平方的匿名函数,并将其赋值给变量square
。lambda
函数常用于需要将一个简单的函数作为参数传递给其他函数的情况,比如在sorted
、map
、filter
等函数中. -
在map函数中使用lamda
在 Python 中,
map()
函数用于对可迭代对象中的每个元素应用指定的函数,并返回一个新的可迭代对象,其中包含应用函数后的结果。 下面是一个使用lambda
函数在map()
中的示例:numbers = [1, 2, 3, 4, 5] result = map(lambda x: x * 2, numbers) print(list(result))
在上述代码中,
lambda x: x * 2
定义了一个匿名函数,将输入的每个元素乘以 2 。map()
函数将这个匿名函数应用于numbers
列表中的每个元素,并返回一个新的可迭代对象,通过list()
函数将其转换为列表并打印输出。顺便说下,一般不这么用。用列表推导。
-
迭代器和生成器
在 Python 中,迭代器(Iterator)和生成器(Generator)是两个重要的概念。
迭代器是一种对象,它实现了迭代器协议,即包含
__iter__()
方法和__next__()
方法。通过反复调用__next__()
方法,可以依次获取容器中的元素,直到没有更多元素时抛出StopIteration
异常。生成器是一种特殊的迭代器,它的创建方式更加简洁。生成器函数使用
yield
关键字来暂停和恢复函数的执行状态,从而实现迭代器的功能。生成器的主要优点包括:
- 节省内存:生成器按需生成值,而不是一次性生成所有值并存储在内存中,特别适合处理大量数据。
- 代码简洁:相比实现完整的迭代器类,生成器函数的写法更加直观和简洁。
-
setup.py
setup.py
是 Python 中用于定义项目安装信息和配置的文件。 在一个 Python 项目中,setup.py
通常用于以下目的:-
定义项目的元数据,如项目名称、版本、作者、许可证等。
-
指定项目的依赖项,即项目运行所需的其他 Python 库。
-
定义如何构建和安装项目,包括编译扩展模块(如果有)、打包项目等。
以下是一个简单的
setup.py
文件示例:from setuptools import setup setup( name='my_project', version='0.1', author='Your Name', description='This is my project', packages=['my_package'], install_requires=[ 'numpy', 'pandas', ], )
要使用
setup.py
进行项目的安装或打包,可以在项目根目录下运行相应的命令,例如:-
安装项目到当前 Python 环境:
python setup.py install
-
创建项目的源代码分发(Source Distribution):
python setup.py sdist
-
创建项目的二进制分发(Wheel Distribution):
python setup.py bdist_wheel
随着
setuptools
和pip
的发展,现在更推荐使用pyproject.toml
来配置项目的构建和安装信息,但setup.py
仍然被广泛使用,尤其是在一些较旧的项目或特定的场景中。
-
-
-
q.join_thread()
q.join_thread()
这个方法通常用于与多线程编程中使用的队列相关的操作。当在多线程环境中使用队列时,可能会有一个后台线程在处理队列中的任务或数据。
q.join_thread()
的目的是阻塞当前线程,直到与该队列相关联的后台线程完成其执行并退出。这样可以确保在继续执行后续代码之前,与队列相关的后台工作已经全部完成,避免出现因后台线程未完成而导致的错误或不一致的情况。
它有助于协调线程之间的执行顺序,确保线程之间的同步和正确的交互。但具体的行为和效果可能会因使用的队列实现库和上下文而有所不同。