七,Class
nonlocal和global关键字def scope_test():
def do_local():
spam = "local spam"
def do_nonlocal():
nonlocal spam #nonlocal 将引用外层已存在变量,但非全局变量
spam = "nonlocal spam"
def do_global():
global spam #声明全局变量,存在与全局域中
spam = "global spam"
spam = "test spam"
do_local()
print("After local assignment:", spam)
do_nonlocal()
print("After nonlocal assignment:", spam)
do_global()
print("After global assignment:", spam)
scope_test()
print("In global scope:", spam)
类基本定义格式class MyClass:
a=1234; #直接在类里的会变为静态变量被所有对象共用,称为类变量
#构造函数
def __init__(self,value):
self.i=value #属性定义和赋值应该在构造函数里,称为实例变量
self.__private="privatevalue"#私有变量
#析构函数
def __del__(self):
pass
#函数定义
def f(self):
return 'hello world'
继承父类:
class DerivedClassName(BaseClassName): #多重继承(name, name, name) <statement-1> . . . <statement-N>
Isinstance()——判断一个对象是否是类的一个实例Issubclass()——判断一个类是否是另一个类的子类
在类中实现__iter__和__next__函数可以实现迭代器,用于for a in b语句#自定义类中实现迭代器
class MyItertator:
#构造函数
def __init__(self,data):
self.data=data
self.index=len(data)
#定义__iter__和__next__用来实现迭代器
def __iter__(self):
return self
def __next__(self):
if self.index == 0:
raise StopIteration
self.index =self.index-1
return self.data[self.index]
#使用示例
my=MyItertator("barret")
for m in my:
print(m)
yield关键字可以自动生成__iter__和__next__函数,实现迭代器。其内在逻辑为:yeild将语句执行的结果全部保存,在调用迭代器的__next__方法时,yield会从保存的数据中取一个值,直到所有值取完。
#使用yield自动生成迭代器
def reverse(data):
for index in range(len(data)-1, -1, -1):
yield data[index] #保存了for语句的所有执行结果
for char in reverse('golf'): #这里char或映射到yield保存的每个结果
print(char)
