迭代器的用法在 Python 中普遍而且统一。在后台,for 语句在容器对象中调用 iter() 。 该函数返回一个定义了 next() 方法的迭代器对象,它在容器中逐一访问元素。没有后续的元素时,next() 抛出一个 StopIteration 异常通知 for 语句循环结束。
了解了迭代器协议的后台机制,就可以很容易的给自己的类添加迭代器行为。定义一个 __iter__() 方法,使其返回一个带有 next() 方法的对象。如果这个类已经定义了 next(),那么 __iter__() 只需要返回self。
以下是其工作原理的示例:
Python代码
class Reverse:"Iterator for looping over a sequence backwards"
def __init__(self, data):
self.data = data
self.index = len(data)
def __iter__(self):
return self
def next(self):
if self.index == 0:
raise StopIteration
self.index = self.index - 1
return self.data[self.index]
Python代码
for char in Reverse('spam'):
print char
希望能帮到你!
使用方法:
class A(object):def foo(self,x):
#类实例方法
print "executing foo(%s,%s)"%(self,x)
@classmethod
def class_foo(cls,x):
#类方法
print "executing class_foo(%s,%s)"%(cls,x)
@staticmethod
def static_foo(x):
#静态方法
print "executing static_foo(%s)"%x
调用方法:
a = A()a.foo(1) //print : executing foo(<__main__.A object at 0xb77d67ec>,1)
a.class_foo(1) //executing class_foo(<class '__main__.A'>,1)
A.class_foo(1) //executing class_foo(<class '__main__.A'>,1)
a.static_foo(1) //executing static_foo(1)
A.static_foo(1) //executing static_foo(1)
类方法和静态方法都可以被类和类实例调用,类实例方法仅可以被类实例调用。
类方法的隐含调用参数是类,而类实例方法的隐含调用参数是类的实例,静态方法没有隐含调用参数。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)