zoukankan      html  css  js  c++  java
  • python开发技术详解(三) 进阶的语法

    文章目录:

    1.   __call__
    2.   __iter__
    3.   yeild
    4.   arrage

      __call__ 可调用对象

      

    #!/usr/bin/env python
    #!-*-coding:utf-8-*-
    '''
        switch (C+)
        @author xyt
        可调用对象
    '''
    class g_dpm(object):
        def __init__(self,g):
            self.g=g
        
        def __call__(self,t):
            return self.g*t**2
    
    e_dpg=g_dpm(9.8)
    s=e_dpg(2) #2秒后自由下降距离。

    动态函数:

      利用eval转换为函数名(表达式),再调用函数

    class student(object):
        def english(self):
            print "hello!"
    
        def china(self):
            print "你好!"
            
        def __call__(self,*args):
            eval(args[0])
            self.english()
            
    stu=student()
    english='english'
    stu(english)       
            

    __iter__ 迭代对象的使用:

    #!/usr/bin/env python
    #!-*-coding:utf-8-*-
    '''
    介绍python的built-in函数iter,以及类中的两个函数__iter__,__next__
    
    iter函数有两种用法,一种是传一个参数,一种是传两个参数。返回的结果都是返回一个iterator对象。 
    先说传两个参数的,比如有 
    Python代码  收藏代码
    i1 = iter(itr, 'c')  
    
    这个意思是说,返回itr的iterator,而且在之后的迭代之中,迭代出来'c'就立马停止。对这个itr有什么要求呢?这个itr在这里必须是callable的,即要实现__call__函数 
    '''
    
    class Itr(object):
        def __init__(self):
            self.result=[1,2,3,4,5,6,7,8,9]
            self.i=iter(self.result)
            
        def __call__(self):  
            res = next(self.i)  
            print("__call__ called, which would return ", res)  
            return res
        
        def __iter__(self):
            return iter(self.result)
        
    itr = Itr()
    a=iter(itr)
    for i in a:
        print i
        
    a=iter(itr,4)
    for i in a:
        print i

      yeild

      带有 yield 的函数在 Python 中被称之为 generator(生成器)

    def fab(max):
        print max 
        n, a, b = 0, 0, 1 
        while n < max: 
            yield b 
            a, b = b, a + b 
            n = n + 1 
            
    a=fab(11)
    for i in a:
        print i

    简单地讲,yield 的作用就是把一个函数变成一个 generator,带有 yield 的函数不再是一个普通函数,Python 解释器会将其视为一个 generator,调用 fab(5) 不会执行 fab 函数,而是返回一个 iterable 对象!在 for 循环执行时,每次循环都会执行 fab 函数内部的代码,执行到 yield b 时,fab 函数就返回一个迭代值,下次迭代时,代码从 yield b 的下一条语句继续执行,而函数的本地变量看起来和上次中断执行前是完全一样的,于是函数继续执行,直到再次遇到 yield。   


    xrange 通过 iterable 对象来迭代

     for i in range(1000): pass

    会导致生成一个 1000 个元素的 List,而代码:

     for i in xrange(1000): pass

    则不会生成一个 1000 个元素的 List,而是在每次迭代中返回下一个数值,内存空间占用很小。因为 xrange 不返回 List,而是返回一个 iterable 对象。

      

  • 相关阅读:
    Qt线程的简单使用(四)——QSemaphore的使用
    Qt线程的简单使用(三)——通过一个实例理解QMutex的使用
    Qt线程的简单使用(二)——通过继承QThread()创建线程
    Qt线程的简单使用(一)——通过QObject::moveToThread()创建线程
    高斯投影与UTM的异同
    基于Qt的Tcp协议的流程图
    OC系列高级-block
    OC系列foundation Kit基础-NSDate
    OC系列高级-内存管理关键字
    OC系列高级-NSValue
  • 原文地址:https://www.cnblogs.com/canbefree/p/4022864.html
Copyright © 2011-2022 走看看