Python Tutorial three

    xiaoxiao2021-03-25  102

    七,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)

    转载请注明原文地址: https://ju.6miu.com/read-18935.html

    最新回复(0)