首页 > 代码库 > python开发技术详解(三) 进阶的语法

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**2e_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=englishstu(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 对象。

 

 

 

 

  

python开发技术详解(三) 进阶的语法