Python Tutorial three

来源:互联网 发布:程序员等级划分 编辑:程序博客网 时间:2024/04/28 10:49

七,Class

  1. 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)

  1. 类基本定义格式

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>

  1. Isinstance()——判断一个对象是否是类的一个实例

Issubclass()——判断一个类是否是另一个类的子类

  1. 在类中实现__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)

  1. 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)


0 0
原创粉丝点击