Python-函数的各种器
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-函数的各种器相关推荐
- Python函数和装饰器
Python函数和装饰器 1. 函数 1.1 函数的介绍 定义:能够实现具体的某个功能""" 定义:能够实现指定功能的代码块例如:print('天王盖地虎')print( ...
- 五、python函数、装饰器、内置函数、json及模块
一.递归调用 1.一个函数自己调用自己就是递归调用,最多一个函数递归调用自己999次,超过就会出错 2.递归必须有一个明确的结束条件 3.每次进入更深一层递归时,问题规模相比上次递归都应有所减少 4. ...
- python函数——Keras分词器Tokenizer
文章目录 0. 前言 1. 语法 1.1 构造参数 1.2 返回值 1.3 类方法 1.4 属性 2. 简单示例 3. 常用示例 python函数 系列目录:python函数--目录 0. 前言 To ...
- python函数的装饰器
python 函数装饰器 更新2020-7 加个更舒服的教程链接 python 函数装饰器简介 一切皆对象 在函数中定义函数 从函数中返回函数 将函数作为参数传给另一个函数 你的第一个装饰器 装饰器的 ...
- Python函数之装饰器
装饰器 一.装饰器的意义 比如:以下函数是供我们调用的,但是我们需要在每个函数中都添加同一个功能,该如何做到呢? 对于函数开放封闭原则,我们一般不允许修改.所以我们引入了装饰器: def outer( ...
- Python函数的装饰器,两层装饰器和三层装饰器
一.装饰器 1.函数装饰圈的定义 函数装饰器:一种装饰函数的函数 2.个人理解两层函数装饰器 两层函数装饰器个人觉得他其实就是把需要装饰的函数名丢入形参,然后用一个嵌套的函数对其头尾进行添加程序,但是 ...
- 2.3.12 Python 函数进阶-装饰器
代码运行期间动态增加功能的方式,称之为"装饰器"(Decorator) 本质上,decorator就是一个返回函数的高阶函数 所以,我们要定义一个能打印日志的decorator,可 ...
- python函数之各种器
一: 装饰器 1:装饰器模板 def wrapper(func):def inner(*args,**kwargs):ret =func(*args,**kwargs)return retreturn ...
- doraemon的python 函数与装饰器(哎呀,忘记传了)
5.10 函数中高级 5.10.1 函数可以当做返回值 def func(): print(123) def bar(): return funcv = bar()v() 5.10.2 闭包 de ...
- python函数装饰函数_Python精进-装饰器与函数对象
本文为<爬着学Python>系列第四篇文章. 从本篇开始,本专栏在顺序更新的基础上,会有不规则的更新. 在Python的学习与运用中,我们迟早会遇到装饰器,这个概念对于初识装饰器的新手来说 ...
最新文章
- 第七周项目一-成员函数、友元函数和一般函数有区别(1)
- IPSEC传输模式和隧道模式的区别
- 延长EEPROM使用寿命的程序优化方法
- TCP/IP总结(4)TCP 之最大消息长度
- customplot设置单个点的颜色_[原创]单个超大型TB级imaris的ims文件的Surface手绘及Mask提速新方法...
- Pair Project: API设计 by Xiao Li and Yishi Xing
- 一种低延迟的超时中心实现方式
- do{}while(0)只执行一次无意义?你可能真的没理解!
- git配置密钥后无法pull
- 高一计算机会考英语,高中会考英语单词表.doc
- webstorm 快捷键
- HTML静态网页作业——动漫火影忍者 (HTML+CSS)制作个人主页课程设计
- Compose的手势(六)
- 世界上第一台计算机的问世地点,1946年2月14日 世界上第一台计算机诞生及bug由来...
- xxl job踩坑记
- 二手车APP软件开发主要功能
- 等额本金和等额本息的区别
- php+phpstudy搭建后台提示Warning
- 基于Arduino的音乐动感节奏灯
- python舆情系统开发_舆情系统开发