判断是否为可迭代对象
from collections.abc import Iterableobj = [1, 2, 3]
if isinstance(obj, Iterable):print("这是一个可迭代对象")
else:print("这不是一个可迭代对象")
_next_
是 Python 中迭代器对象的一个方法,用于获取下一个元素。
当使用迭代器进行迭代时,通过调用 __next__ 方法可以依次获取迭代器中的元素,
直到没有更多元素可获取时,会引发 StopIteration 异常。
产生生成器的方法:
- 使用函数和
yield
关键字**:在函数中使用 yield
语句来定义生成器。
def func()...yield
- 列表推导式**:可以通过在列表推导式中使用
yield
来创建生成器。
gen = (i for i in range(5))
generator就是生成器 - next():获取生成器中的下一个元素。
- send(value) :向生成器发送一个值,并继续执行生成器函数到下一个
yield
语句。 - throw(type, value=None, traceback=None):在生成器内部抛出异常。
- close():关闭生成器,后续再调用
__next__()
会引发 StopIteration
异常。 - 协程:
执行过程中暂停和恢复,允许在一个函数内部实现多个任务的协作执行。协程通过yield关键字或特定的协程库来实现。
Python 的可迭代对象:
- 列表(List)
- 元组(Tuple)
- 字符串(String)
- 字典(Dictionary)
- 集合(Set)
- 文件对象(File Objects)
- 迭代器与迭代器:
- 可迭代的对象并不一定就是迭代器。
- 可迭代对象是能够通过迭代操作依次获取元素的对象,
- 而迭代器是实现了迭代器协议的对象,它不仅可以被迭代,
- 还能记住当前的迭代位置,并在每次迭代时返回下一个元素。
迭代器与生成器:
迭代器:是一个对象,它实现了迭代器协议,能够逐个返回元素。
生成器:是一种特殊的迭代器,它通过使用yield
关键字来定义,可以在执行过程中暂停和恢复,按需生成元素。
生成器是创建迭代器的一种简洁方式,
魔术方法:
- 魔术方法(Magic Methods)是 Python 中一些具有特殊名称和功能的方法。
它们通常以双下划线开头和结尾,如__init__
、__str__
、__len__
等。 __init__
:类的构造方法,用于初始化对象。- 触发条件
_str_方法的触发条件主要有以下几种: 使用
str()`函数将对象转换为字符串时**。 打印对象时 - 注意点
在自定义__str__
方法时需要注意以下几点: - 返回值应为字符串类型:确保返回的是一个能够清晰表示对象的字符串。
- 简洁明了:尽量使返回的字符串简洁易懂,能够准确反映对象的关键信息。
- 一致性:保持返回的字符串与对象的实际状态一致,避免产生误导。
__str__
:定义对象的字符串表示形式。
class MyClass:def __init__(self, name):self.name = namedef __str__(self):return f"MyClass object with name: {self.name}"obj = MyClass("example")print(obj)
__len__
:定义对象的长度。
class MyList:def __init__(self, items):self.items = itemsdef __len__(self):return len(self.items)my_list = MyList([1, 2, 3])print(len(my_list))
__del__
:对象被销毁时调用。
__del__
方法的触发条件通常有以下几种情况:
1. 程序结束时**:当程序正常结束运行时,会触发对象的__del__
方法。
2. 对象的所有引用都被删除时**:当对象不再有任何其他变量引用它时,会触发__del__
方法。__eq__
、__ne__
、lt、__le__
、__gt__
、__ge__
:用于比较对象。- sys.getrefcount()
获取对象的引用计数 - __init__方法是 Python 中的一个特殊方法,也称为构造方法。
它在创建对象时被自动调用,用于对新创建的对象进行初始化操作。
可以在__init__方法中为对象的属性赋值,执行其他必要的初始化任务。
通过传递参数给__init__方法,为对象的name属性赋值
class MyClass:def __init__(self, name):self.name = name
创建对象并进行初始化
obj = MyClass("示例对象")
__del__
__del__方法在对象即将被销毁时被调用。
需要注意的是,__del__方法的执行时间并不确定,
它可能不会及时被触发,尤其是在程序正常结束时。
并且,不建议在__del__方法中执行一些关键的操作或资源释放,因为它的执行可能不可靠。