深入理解Python生成器、迭代器、动态新增属性及方法
什么是迭代器
迭代器是将数据结构中的每个元素逐个进行访问的方式,而不需要事先确定要访问的元素个数。Python中的所有迭代器都有两个基本的方法,即__iter__()和__next__()。
- iter():返回迭代器本身,通常在需要迭代器的情况下会被调用。
- next():从集合中取回下一个元素。
下面是一个简单的列表迭代器示例:
my_list = [1, 2, 3]
my_iter = iter(my_list)
print(next(my_iter)) # 1
print(next(my_iter)) # 2
print(next(my_iter)) # 3
什么是生成器
生成器是可以暂停和恢复执行的函数,用于按需生成值。生成器不能直接访问,而是使用next()方法迭代。Python中的生成器可以用函数实现,也可以使用生成器表达式实现。
下面是一个使用函数实现的生成器示例:
def fibonacci(n):
a, b = 0, 1
for _ in range(n):
yield a
a, b = b, a + b
for i in fibonacci(5):
print(i)
上面的代码中,生成器函数中使用了yield关键字,它会返回生成器对象。每次调用next()方法时,Python会执行函数直到遇到yield关键字,并返回一个值。在完成一个值的返回后,函数的状态会被保存,以便下次调用继续执行。
下面是一个使用生成器表达式实现的生成器示例:
my_list = [1, 2, 3, 4, 5]
gen_exp = (item ** 2 for item in my_list)
for i in gen_exp:
print(i)
上面的代码中,使用了生成器表达式生成了一个平方数的生成器对象,通过for循环迭代。
动态增加属性和方法
在Python中,我们可以在任何时候为对象增加属性和方法。
下面是一个简单的动态增加属性的示例:
class Person:
def __init__(self, name):
self.name = name
p = Person('Tom')
p.age = 18 # 动态增加一个age属性
print(p.age) # 18
上面的代码中,我们创建了一个名为Person的类,然后动态增加了一个名为age的属性。
下面是一个动态增加方法的示例:
class Person:
def __init__(self, name):
self.name = name
p = Person('Tom')
def say_hello(self):
print('Hello, my name is {}.'.format(self.name))
Person.say_hello = say_hello # 动态增加一个方法
p.say_hello() # Hello, my name is Tom.
上面的代码中,我们创建了一个名为Person的类,然后动态增加了一个名为say_hello的方法。
以上就是Python生成器、迭代器、动态新增属性及方法的介绍及示例。
本站文章如无特殊说明,均为本站原创,如若转载,请注明出处:深入理解python 生成器、迭代器、动态新增属性及方法 - Python技术站