美文网首页
python3基础---生成器

python3基础---生成器

作者: HopCoder | 来源:发表于2017-09-22 13:31 被阅读0次
    def createNum():
        print('-----start----')
        a,b = 0,1
        for i in range(5):
            print('----- 1 ----')
            yield b
            print('----- 2 ----')
            a,b = b,a+b
            print('----- 3 ----')
        print('------stop------')
    

    调用结果

    1. createNum() #没有任何打印

    2. a = createNum() # a此时就是一个生成器
      print(a)

    <generator object createNum at 0x102981728>
    
    1. next(a)
    -----start----
    ----- 1 ----
    
    1. next(a)
    ----- 2 ----
    ----- 3 ----
    ----- 1 ----
    

    添加了yield b之后,每次调用next(a)循环都会在yield 处停止,只到下一次调用生成器时,才会继续往下执行代码
    next(a) 等价于 a.next()

    send

    def createNum():
        i = 0
        while i < 5:
            temp = yield i
            print(temp)
            i += 1
    
    
    a = createNum()
    next(a) # 没有任何打印
    next(a) # 打印None
    
    next(a) # 打印None
    next(a) # 打印None
    a.send('hahaha') # hahaha
    #说明send函数是在给yield i这个模块代码赋值。
    

    注意事项:如果不调用next(a)或者a.next(),直接调用send('haha') 对yield赋值导致程序崩溃,愿意在于send找不到yield,正确的方式是send(None)

    元类(type)

    类也是对象,我们可以动态的创建它们
    type叫做元类 ,使用type可以创建类

    Person2 = type("Person2",(),{"num":0})
    p1 = Person2()
    print(p1.num)
    
    创建一个带函数的类
    def printNum(self):
            print("----num--%d---"%self.num)
    Person3 = type("Person3",(),{"printNum":printNum})
    p3 = Person3()
    p3.num = 100
    p3.pringNum()
    
    创建一个继承的类
    Man = type("Man",(Person,){})
    xiaoming = Man()
    xiaoming.eat()
    

    元类就是用来创建类的东西,元类就是类的类
    Myclass = MetaClass() #使用元类创建出的一个对象,这个对象称为"类"
    MyObject = MyClass() #使用“类”来创建出实例对象

    MyClass = type('MyClass',(),{})

    可以使用 _ _ class _ _ 来判断是元类
    MyClass._ class _

    _ _ metaclass _ _属性

    class Foo(object):
        __metaclass__ = something... 代码..
        #something... 代码..  使用元类创建类的代码。也就是说__metaclass__属性决定了class类的创建
    

    相关文章

      网友评论

          本文标题:python3基础---生成器

          本文链接:https://www.haomeiwen.com/subject/jqpcsxtx.html