博客
关于我
强烈建议你试试无所不能的chatGPT,快点击我
python3 速查参考- python基础 7 -> 函数编程之 装饰器、生成器
阅读量:7030 次
发布时间:2019-06-28

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

装饰器


 

1.速查笔记

#-- 函数装饰器:是它后边的函数的运行时的声明 由@符号以及后边紧跟的"元函数"(metafunction)组成          @staticmethod          def smeth(x): print(x)      # 等同于:          def smeth(x): print(x)          smeth = staticmethod(smeth)

定义:在代码运行期间动态增加功能的方式,称之为“装饰器”(Decorator)

经典示例:

# -*-  coding:utf-8 -*-import timedef timer(func): #把被装饰的函数ceshi的内存地址传给了func    def deco(*args,**kwargs):        start_time = time.time()        func(*args,**kwargs)        stop_time = time.time()        print('测试函数运行时间',(stop_time-start_time))    return deco #返回deco的内存地址@timerdef ceshi(a):    time.sleep(3)    print('测试%s'%a)ceshi('装饰器')

2. 原则:①不能修改被装饰函数的源代码;②不能修改被装饰函数的调用方式

3.实现装饰器的技能储备

① 函数本身即是变量

② 高阶函数,把一个函数名当做实参穿给另一个函数

③ 嵌套函数

 

参考:https://www.liaoxuefeng.com/wiki/0014316089557264a6b348958f449949df42a6d3a2e542c000/0014318435599930270c0381a3b44db991cd6d858064ac0000

 

 

生成器


 

1.速查笔记

#-- 生成器函数:yield VS return      def gensquare(N):          for i in range(N):              yield i** 2                 # 状态挂起 可以恢复到此时的状态      for i in gensquare(5):              # 使用方法          print(i, end = ' ')             # [0, 1, 4, 9, 16]      x = gensquare(2)                    # x是一个生成对象      next(x)                             # 等同于x.__next__() 返回0      next(x)                             # 等同于x.__next__() 返回1      next(x)                             # 等同于x.__next__() 抛出异常StopIteration        #-- 生成器表达式:小括号进行列表解析      G = (x ** 2 for x in range(3))      # 使用小括号可以创建所需结果的生成器generator object      next(G), next(G), next(G)           # 和上述中的生成器函数的返回值一致      #(1)生成器(生成器函数/生成器表达式)是单个迭代对象      G = (x ** 2 for x in range(4))      I1 = iter(G)                        # 这里实际上iter(G) = G      next(I1)                            # 输出0      next(G)                             # 输出1      next(I1)                            # 输出4      #(2)生成器不保留迭代后的结果      gen = (i for i in range(4))  in gen                            # 返回True  in gen                            # 返回True  in gen                            # 返回False,其实检测2的时候,1已经就不在生成器中了,即1已经被迭代过了,同理2、3也不在了

2. 生成器表达式

局限性:只能适合简单的算法

示例: 

test = (x**2 for x in range(1,10))print(next(test))print(test.__next__())

 

 

3. 生成器函数 yield

斐波那契函数的打印示例:

def fib(max):    a,b,n = 1,1,0    while n

 

转载于:https://www.cnblogs.com/wuzhiming/p/8988427.html

你可能感兴趣的文章
初识 Knative: 跨平台的 Serverless 编排框架
查看>>
Spark in action on Kubernetes - Spark Operator的原理解
查看>>
实现 base64+gzip+AES-ECB加密解密
查看>>
网易云音乐下载|网易云音乐电脑版下载
查看>>
linux 主机名常忽略的小问题
查看>>
Lock wait timeout exceeded; try restarting tran...
查看>>
存储过程优势
查看>>
2012年4月MVP申请截止时间:2012年1月12日
查看>>
mydns的安装
查看>>
tar增量备份
查看>>
xen 故障汇总
查看>>
SecureCRT的使用--增加队列
查看>>
搭建gitlab
查看>>
linux常用命令-cd/type/printenv/hash
查看>>
python第二章 变量
查看>>
数据中心虚拟化需要大二层网络
查看>>
在Exchange server 2007中管理pop3和IMAP4协议访问
查看>>
后台在线编辑模板禁止提交含有{php 的标签解决办法
查看>>
《iPhone与iPad开发实战—iOS经典应用剖析》连载二
查看>>
软raid的详细配置讲解 raid 1
查看>>