Python中的各大器,方便函数的使用,新增函数的方法和用途

一、装饰器

  定义:在原有的函数前后,增加功能,且不改变原函数的调用方式

  

def wrapper(f1):'''
使用闭包函数用于装饰器的原因是:不想修改原函数的调用方式'''def inner(*args,**kwargs):'''执行函数之前的操作'''ret = f1(*args,**kwargs)'''执行函数之后的操作'''return retreturn inner#使用装饰器wrapper的方式为
@wrapper
def  func():pass

注:在装饰器中的返回值,只能用一个变量将内部的函数返回值接收,如果直接返回函数的返回值,会导致多次执行装饰函数

装饰器的进阶

1、控制装饰器

#需求:控制装饰器的开启和关闭
FLAG=True  #全局变量,控制是否开启装饰器
def outer(flag):def wrapper(f1):def inner(*args,**kwargs):if flag:'''执行函数之前的操作'''ret = f1(*args,**kwargs)'''执行函数之后的操作'''else:ret = f1(*args, **kwargs)return retreturn innerreturn  wrapper@outer(FLAG)
def fun():pass

2、多个装饰器,装饰函数

def wrapper1(func):def inner():print('wrapper1 ,before func')func()print('wrapper1 ,after func')return innerdef wrapper2(func):def inner():print('wrapper2 ,before func')func()print('wrapper2 ,after func')return inner@wrapper2
@wrapper1
def f():print('in f')f()
#结果是wrapper2
wrapper1
wrapper1
wrapper2
 

二、迭代器

引入:

  如何从列表和字典中取值

    index索引

    for循环

凡是可以使用for循环取值的都是可迭代的

可迭代协议:内部含有__iter__方法的都是可迭代的

迭代器协议:内部含有__iter__方法和__next__ 方法的都是迭代器

  next方法:只取出当前位置和下一个位置的值

迭代器的优势:1、节省内存,2、用时快:取一个值,就可以进行运算,不用取出所有值,再进行计算

range在py2和py3的区别:

  py2中:不管range多少,会生成一个列表,这个列表来存储所有生成的值

  py3中:不管range多少,都不会实际的生成任何一个值

迭代器的特性:惰性运算

对迭代器的判断:

from collections import Iterator
print(isinstance(range(100000000),Iterator))  #验证range执行之后得到的结果不是一个迭代器

三、生成器

  自己写的迭代器就是一个生成器

  两种自己写生成器(迭代器)的机制:生成器函数  生成器表达式

  凡是带有yield的函数,就是一个生成器函数

def func():print("#####")yield  1print("%%%%%%")yield 2  #记录当前所在位置,等待下次next来触发函数的状态

g=func()
print("```",next(g))
print("```",next(g))
#生成器的调用执行函数代码的,只返回一个生成器(迭代器)
#想要生成器函数执行,需要用next来调用#yield是个关键字,作用类似return,但是区别于return,yield在函数的执行过程中遇到后,只会暂停函数的运行,存入到内存中,但是不会将函数终止释放,当下次调用next方法的时候,会在从yield的位置继续运行,并且yield还可以赋值给变量,并接收send传入的值

#在生成器中传入参数
#计算输入值后的平均值
def  average():sum_money=0day=0avg=0while True:money = yield  avgsum_money += moneyday += 1avg = sum_money / day
g = average()
next(g)print(g.send(200))
print(g.send(300))

计算平均值

  注:send必须在next方法后运行,不能直接使用

 

转载于:https://www.cnblogs.com/fan-yi/p/8906086.html

Python-函数的各种器相关推荐

  1. Python函数和装饰器

    Python函数和装饰器 1. 函数 1.1 函数的介绍 定义:能够实现具体的某个功能""" 定义:能够实现指定功能的代码块例如:print('天王盖地虎')print( ...

  2. 五、python函数、装饰器、内置函数、json及模块

    一.递归调用 1.一个函数自己调用自己就是递归调用,最多一个函数递归调用自己999次,超过就会出错 2.递归必须有一个明确的结束条件 3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 4. ...

  3. python函数——Keras分词器Tokenizer

    文章目录 0. 前言 1. 语法 1.1 构造参数 1.2 返回值 1.3 类方法 1.4 属性 2. 简单示例 3. 常用示例 python函数 系列目录:python函数--目录 0. 前言 To ...

  4. python函数的装饰器

    python 函数装饰器 更新2020-7 加个更舒服的教程链接 python 函数装饰器简介 一切皆对象 在函数中定义函数 从函数中返回函数 将函数作为参数传给另一个函数 你的第一个装饰器 装饰器的 ...

  5. Python函数之装饰器

    装饰器 一.装饰器的意义 比如:以下函数是供我们调用的,但是我们需要在每个函数中都添加同一个功能,该如何做到呢? 对于函数开放封闭原则,我们一般不允许修改.所以我们引入了装饰器: def outer( ...

  6. Python函数的装饰器,两层装饰器和三层装饰器

    一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是 ...

  7. 2.3.12 Python 函数进阶-装饰器

    代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator) 本质上,decorator就是一个返回函数的高阶函数 所以,我们要定义一个能打印日志的decorator,可 ...

  8. python函数之各种器

    一: 装饰器 1:装饰器模板 def wrapper(func):def inner(*args,**kwargs):ret =func(*args,**kwargs)return retreturn ...

  9. doraemon的python 函数与装饰器(哎呀,忘记传了)

    5.10 函数中高级 5.10.1 函数可以当做返回值 def func(): print(123) def bar(): return func​v = bar()​v() 5.10.2 闭包 de ...

  10. python函数装饰函数_Python精进-装饰器与函数对象

    本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...

最新文章

  1. 第七周项目一-成员函数、友元函数和一般函数有区别(1)
  2. IPSEC传输模式和隧道模式的区别
  3. 延长EEPROM使用寿命的程序优化方法
  4. TCP/IP总结(4)TCP 之最大消息长度
  5. customplot设置单个点的颜色_[原创]单个超大型TB级imaris的ims文件的Surface手绘及Mask提速新方法...
  6. Pair Project: API设计 by Xiao Li and Yishi Xing
  7. 一种低延迟的超时中心实现方式
  8. do{}while(0)只执行一次无意义?你可能真的没理解!
  9. git配置密钥后无法pull
  10. 高一计算机会考英语,高中会考英语单词表.doc
  11. webstorm 快捷键
  12. HTML静态网页作业——动漫火影忍者 (HTML+CSS)制作个人主页课程设计
  13. Compose的手势(六)
  14. 世界上第一台计算机的问世地点,1946年2月14日 世界上第一台计算机诞生及bug由来...
  15. xxl job踩坑记
  16. 二手车APP软件开发主要功能
  17. 等额本金和等额本息的区别
  18. php+phpstudy搭建后台提示Warning
  19. 基于Arduino的音乐动感节奏灯
  20. python舆情系统开发_舆情系统开发

热门文章

  1. 游戏的「隐藏身份」:AI与现实世界的「王牌训练师」
  2. 人工智能如何推动神经科技发展?
  3. 蕨叶形生物刷新生命史,动物界至少起源于5.7亿年前
  4. 工业3D打印:一场仍处在初级阶段的技术革命
  5. 云计算行业报告:2018, 风起云涌
  6. 谷歌X实验室的“无用”发明
  7. 机器人3·15 | 赛迪「机器人国评中心」揭示机器人产品质量6大痛点!
  8. 「谷歌大脑」提出通过对长序列进行摘要提取,AI可自动生成「维基百科」
  9. 一个仿微信朋友圈的图片查看框架 - PhotoViewer
  10. 更上层楼:动态安装你的windows服务