博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python开发技术详解(三) 进阶的语法
阅读量:4507 次
发布时间:2019-06-08

本文共 2021 字,大约阅读时间需要 6 分钟。

文章目录:

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

 

 

 

 

  

转载于:https://www.cnblogs.com/canbefree/p/4022864.html

你可能感兴趣的文章
同步、异步、阻塞与非阻塞
查看>>
01软件架构设计的思想与模式阅读笔记
查看>>
Selenium 上传文件失败,解决办法一
查看>>
2019年,我们需要加强关注网络安全的6大原因
查看>>
Hexo主题 —— NexT优化
查看>>
Python Web Flask源码解读(三)——模板渲染过程
查看>>
JavaScript 中的对象(一)- 对象的概念、模型、以及创建
查看>>
产品的痛点、爽点和痒点
查看>>
密码学摘要算法之SHA2
查看>>
dealloc和weak底层实现
查看>>
【网络】Windows 下 socket 编程范例
查看>>
【IT】CRC校验码是怎么回事呢?
查看>>
hashmap C++实现
查看>>
C++深拷贝和浅拷贝细节理解
查看>>
云风协程库coroutine源码分析
查看>>
【漫谈数据仓库】 如何优雅地设计数据分层 ODS DW DM层级
查看>>
POJ - 2559 && POJ - 3494 (单调栈)
查看>>
POJ - 2796 Feel Good (单调栈)
查看>>
2019牛客暑期多校训练营(第一场合集)
查看>>
2019牛客暑期多校训练营(第二场合集)
查看>>