英文下划线与编辑器冲突,以中文代替
构造函数
——init——
使用构造函数在对象创建后就能够调用它
class FooBar:
def __init__(self):
self.somevar = 42
>>> f = FooBar()
>>> f.somevar
42
给构造函数加参数
class FooBar:
def __init__(self, value=42):
self.somevar = value
>>> f = FooBar('This is a constructor argument')
>>> f.somevar
'This is a constructor argument'
元素
——len(self)——:这个方法应返回集合包含的项数,对序列来说为元素个数,对映射来说为键值对数。如果——len——返回零(且没有实现覆盖这种行为的——nonzero——),对象在布尔上下文中将被视为假(就像空的列表、元组、字符串和字典一样)。
——getitem——self, key):这个方法应返回与指定键相关联的值。对序列来说,键应该是0~n-1的整数(,其中n为序列的长度。对映射来说,键可以是任何类型。
——setitem——(self, key, value):这个方法应以与键相关联的方式存储值,以便以后能够使用——getitem——来获取。当然,仅当对象可变时才需要实现这个方法。
——delitem——(self, key):这个方法在对对象的组成部分使用——del——语句时被调用,应删除与key相关联的值。同样,仅当对象可变(且允许其项被删除)时,才需要实现这个方法。
迭代器
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __next__(self):
self.a, self.b = self.b, self.a + self.b
return self.a
def __iter__(self):
return self
fibs=Fibs()
for f in fibs:
if f == 1:
print(f)
break
生成器
生成器由两个单独的部分组成:生成器的函数和生成器的迭代器。生成器的函数
是由def语句定义的,其中包含yield。生成器的迭代器是这个函数返回的结果。
nested = [[1, 2], [3, 4], [5]]
def flatten(nested):
for sublist in nested:
for element in sublist:
yield element
>>> nested = [[1, 2], [3, 4], [5]]
>>> for num in flatten(nested):
... print(num)
...
1
2
3
4
5