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 对象。

  

时间: 2024-11-08 20:05:53

python开发技术详解(三) 进阶的语法的相关文章

python开发技术详解(二)

文章目录: 数据类型 数据类型 a=1 b=2 print id(a) print id(b) Out[1]: 163578032 Out[2]: 163578032 python开发技术详解(二)

python开发技术详解(一)

python是一门简单异动的语言.从今天开始我要每天都做笔记,每天都要写博客记录我所想,我所学到的. 笔记提纲: 1,python的简单介绍,python的编译用法,有什么要注意的. 2,命名规则 3,常量 1,python的简单介绍,python的编译用法,有什么要注意的. python是一门比较新,比较高级的语言.换言之,由于高级,所以没有指针等变量的严格区分.换言之,熟悉python(不是熟练)花的时间要比其他语言少很多时间. python是一门动态编译语言.特征就是代码精简,灵活.  

hadoop应用开发技术详解

<大 数据技术丛书:Hadoop应用开发技术详解>共12章.第1-2章详细地介绍了Hadoop的生态系统.关键技术以及安装和配置:第3章是 MapReduce的使用入门,让读者了解整个开发过程:第4-5章详细讲解了分布式文件系统HDFS和Hadoop的文件I/O:第6章分析了 MapReduce的工作原理:第7章讲解了如何利用Eclipse来编译Hadoop的源代码,以及如何对Hadoop应用进行测试和调试:第8-9章 细致地讲解了MapReduce的开发方法和高级应用:第10-12章系统地讲

《Tomcat与Java Web开发技术详解》思维导图

越想构建上层建筑,就越觉得底层基础很重要.补课系列. 书是良心书,就是太基础了,正适合补课. [纯文字版] Tomcat与Java Web开发技术详解 Servlet Servlet的生命周期 初始化 1Servlet容器加载Servlet类 2Servlet容器创建ServletConfig,初始化配置信息 3Servlet容器创建Servlet对象 4Servlet容器调用Servlet对象的init(ServletConfig) 时机:首次被请求或配置了<load-on-startup>

Eclipse中配置python开发环境详解

1.下载python 安装包.python-2.6.6.msi.并安装.默认python会安装在C:\Python26下,查看环境变量,如果没有在path路径中写入则手动添加.打开一个dos窗口,验证python是否安装成功: C:\Documents and Settings\Administrator>python Python 2.6.6 (r266:84297, Aug 24 2010, 18:46:32) [MSC v.1500 32 bit (Intel)] on win32 Typ

手游服务器开发技术详解

从事游戏服务器开发差不多两年时间,两年间参与了不少项目,学到了很多游戏服务器开发技术,参与过几个不同架构的服务器开发,就随便聊聊游戏服务器开发需要的技术.(以下所指游戏服务器更偏向于手游,因为我对端游和页游开发接触并不多) 一.聊聊服务器开发有哪些东西要考虑. 1.开发语言的选择: 工欲善其事,必先利其器,选择一门适合的开发语法对后期开发有着事半功倍的作用. 业界主要的是c/c++ + Python/lua模式做游戏服务器.c/c++做网络通讯数据传输,python/lua做业务逻辑.这样既保持

征服Ajax-Web2.0开发技术详解试读版

JavaScript 面向对象程序设计 一.JavaScript 中支持面向对象的基础 1.在JavaScript中,函数和类就是一个概念,当new一个函数时,就会返回一个对象.如果这个函数中没有初始化类成员,那就会返回一个空的对象. 2.在JavaScript中,每个对象可以看作是多个属性(方法)的集合,引用一个属性(方法) 很简单,即: 对象名.属性(方法)名 除此之外,还可以用方括号的形式来引用: 对象名["属性(方法)名"] 3.在其他语言中,对象一旦生成,就不可更改了,要为一

《Android底层接口与驱动开发技术详解》digest

第一章:IDE:Eclipse ADT for java developer其它: Apache Ant Java SE Development Kit5或6 Linux和Mac上使用Apache Ant 1.65+,Windows上使用1.7+版本:(单独的JRE是不可以的,必须要有JDK),不兼容Gnu Java编译器(gcj) Java_Home x:\xx\xx\java\JDK1.6.0-17classpath:.;%JAVA_HOME%/lib/rt.jar;%JAVA_HOME%/

Android+3D游戏开发技术详解与典型案例

 内容导读 本书共分两篇,第一篇介绍了Android 3D游戏开发的基础知识,主要对OpenGL ES的相关内容进行了介绍. 章 名主 要 内 容 第1章 英雄还看今朝-Android简介本章介绍了市场上主流的手机平台,同时也分析了未来手机平台的发展趋势及Android平台的前景 第2章 数风流人物-当前流行游戏类型简介本章以分类的方式简要地介绍了当前流行的游戏的玩法,游戏的视觉效果,游戏的设计及<仙剑>等著名游戏的历史 第3章 不积跬步,无以至千里-游戏开发基础知识本章初步介绍了游戏开发的基