day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数

本文档主要内容:

一 装饰器函数的信息打印

二 迭代器

三 生成器

四 生成器表达式和列表推导式

五 内置函数

一 装饰器函数的信息打印

一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印的就是装饰器函数的信息了,如何做呢?

from functools import wraps

def logger(f):    @wraps(f)    def inner(*args, **kwargs):        """        :param args: 函数名,密码        :param kwargs: 备用        :return:  True        """        ret = f(*args, **kwargs)        return ret    return inner

@loggerdef login(username,password):    """    此函数是完成登录功能的函数,需要用户名,和密码两个参数,返回True 登陆成功    :return:  True    """    print(666)    return True# login(1,2)  #inner()# # login(‘alex‘, 123)print(login.__doc__)print(login.__name__)

打印结果为:

此函数是完成登录功能的函数,需要用户名,和密码两个参数,返回True 登陆成功
:return: True

login

二 迭代器

2.1  可迭代对象

定义:在对象中,含有__iter__方法的就是可迭代对象,遵循迭代协议,可迭代对象有:str,list,tuple,dict,set ,range,文件句柄

判断一个对象是否可迭代:int对象不是可迭代对象

1  ‘__iter__‘ in dir(对象) 例如:print(‘__iter__‘ in dir(str))

2 isinstance(‘abc‘,Iterable)

例如:

from collections import Iterableprint(isinstance(‘abc‘,Iterable))

2.2 迭代器

定义:内部含有__iter_并且含有__next__方法的对象就是迭代器,遵循迭代器协议

转化:可迭代对象转化成迭代器

例如:s=‘abc‘

obj_s=s1._iter__()   或者  obj_s=iter(s)

判断一个对象是不是迭代器

1  __iter__ 和 __next__

例如:

s=‘abc‘

print(‘__iter__‘ in dir(s))

print(‘__next__‘ in dir(s))

2 isinstance(‘对象‘,Iterator)

例如:

from collections import Iterator

l1=[1,2,3]

l1_obj=l1.__iter__()

print(isinstance(l1_obj,Iterator))

迭代器的好处:

1,节省内存  2,惰性机制(next一次读一次)    3,单向不可逆

三 生成器

生成器是自定义的迭代器(自己用python代码写的迭代器),函数中见到yield的就是生成器

例如:

def func1():

  print(111)

  yield 666

g_obj=func1()  #生成器对象

print(g_obj)   # <generator object func1 at 0x0000000001E21E60>

print(g_obj.__next__())  #取值

生成器两种方法的区别  send和next

1 send和next都是对生成器取值

2 send会给上一个yield发送一个值

3 send不能用在第一次取值

4 最后一个yield不能得到值

四 生成器表达式和列表推导式

一般就几种列表推导式:

1 [变量(加工后的变量) for 变量 in iterable]   ---》 遍历模式

2 [变量(加工后的变量) for 变量 in iterable if 条件]  --》筛选模式

列表推导式和生成器表达式区别

1.把列表解析的[]换成()得到的就是生成器表达式

2.列表解析与生成器表达式都是一种便利的编程方式,只不过生成器表达式更节省内存

下面是几个例子:

l = [‘您好‘, ‘3.64‘,‘请问您是xxx同学的家长吗‘, ‘6.25‘,‘是的有什么事情吗‘, ‘6.15‘,‘您好我是学大教育的x老师‘, ‘5.06‘,‘这次给给您打电话主要是想了解一下孩子上学期的协议情况‘, ‘5.86‘,‘针对于上学期的学习状况‘, ‘5.37‘,‘我们学校邀请您和孩子周末过来听一下针对性的辅导课好吧好吧‘, ‘5.36‘,‘可以我想问一下都有什么课程呢‘, ‘5.65‘,‘呃主要是有英语和语文‘, ‘4.35‘, ‘你看‘, ‘3.77‘, ‘到时候咱们再联系好吧‘, ‘6.10‘, ‘好的‘, ‘6.45‘, ‘恩再见‘, ‘4.84‘]# 上面这个列表帮我转成下面这种格式# [{"onebest":"您好", "speed":"6.060606"},# {"onebest":"我这是中国电信的客户代表请问您是幺五幺幺零幺五六六六幺号码的长期使用者吗", "speed":"5.479452"},# {"onebest":"是的", "speed":"5.405406"},# {"onebest":"为啥谢谢您长期以来的支持",  "speed":"5.529954"},# {"onebest":"交银退掉", "speed":"4.938272"},# {"onebest":"考虑了解生活小贴士服务美元四月","speed":"4.672897"},# {"onebest":"你们可以收到天气情况活动", "speed":"5.529954"},# {"onebest":"我建议", "speed":"4.347826"},# {"onebest":"生活中了就是周转现在开通后","speed":"4.024768"},# {"onebest":"发到您的", "speed":"8.510638"},# {"onebest":"都会","speed":"4.255319"},# {"onebest":"现在","speed":"6.451613"},# {"onebest":"可以享有就是看吗", "speed":"5.161290"},# {"onebest":"可以","speed":"6.451613"},# {"onebest":"改天先生那是的",  "speed":"4.046243"},# {"onebest":"另外再见",  "speed":"5.479452"}# ]# print([{"onebest":l[i],"speed":l[i+1]} for i in range(len(l)) if i % 2 == 0])  #通过过滤掉奇数位,在剩下的偶数位来创建

。。。待续

原文地址:https://www.cnblogs.com/mmyy-blog/p/9166470.html

时间: 2024-10-12 03:22:23

day5--装饰器函数的信息打印,迭代器,生成器,列表推导式,内置函数的相关文章

python 【迭代器 生成器 列表推导式】

python [迭代器  生成器  列表推导式] 一.迭代器 1.迭代器如何从列表.字典中取值的 index索引 ,key for循环凡是可以使用for循环取值的都是可迭代的可迭代协议 :内部含有__iter__方法的都是可迭代的迭代器协议 :内部含有__iter__方法和__next__方法的都是迭代器 print(dir([1,2,3])) lst_iter = [1,2,3].__iter__() print(lst_iter.__next__()) print(lst_iter.__ne

python 第十二章 生成器+推导式+内置函数一(不常用的)

生成器 # 迭代器:python中内置的一种节省空间的工具 # 生成器的本质就是一个迭代器 # 区别:迭代器自带的,生成器自己写的 # return可以写多个,但是只执行一次 # yield会记录执行位置 # 一个next()对应一个yield def func(): print(123) return "you" print(func()) # 123 # you # return和yield 都是返回值 # 在函数体内将return改成yield的就是一个生成器 def func(

Python中生成器,迭代器,以及一些常用的内置函数.

知识点总结 生成器 生成器的本质就是迭代器. 迭代器:Python中提供的已经写好的工具或者通过数据转化得来的. 生成器:需要我们自己用Python代码构建的 创建生成器的三种方法: 通过生成器函数 通过生成器推导式 python内置函数或者模块提供 生成器函数 yield:一个yield对应一个next,next超过yield数量,就会报错,与迭代器一样. yield与return的区别: return一般在函数中只设置一个,他的作用是终止函数,并传给函数的执行者返回值 yield在生成器中可

装饰器、生成器、迭代器、及python中内置函数的使用

一. 装饰器 1. 装饰器的概述 (1)概述:装饰器本质就是函数,主要用来装饰其他函数,为其他函数添加附加功能. (2)使用装饰器的原则 1)不能修改被装饰的函数的源代码 2)不能修改被装饰的函数的调用方式 (3)装饰器原理:函数即"变量".高阶函数.嵌套函数 2.使用装饰器的原因 (1)传统的多个函数模块修改需要同时修改多个函数.如果函数过多,则修改不方便. 如下,如果想要在每个函数中开头结尾分别输入内容,则需要在每个函数开头结尾加入需要输出的内容. def f1():     pr

Python---迭代器,生成器,列表推导式

# 02,迭代器# 可迭代对象:内部含有__iter__# 迭代器:可迭代对象.__iter__()# 迭代器:内部含有__iter__且__next__# 判断 __iter__ 在不在dir(对象中)# isinstance()# 节省内存.# 惰性机制.# 单向不可逆.# for循环的机制:# while# pass# 可迭代对象# 迭代器# 两者区别# 模拟for循环机制## 03,生成器# 本质上是迭代器,用python代码构建的.# 生成器定义# 生成器的写法# yield# sen

python学习笔记(八)函数return多个值,列表推导式和交换两个变量的值

函数return多个值: 补充知识点:写代码得到时候少用全局变量: 1.不安全 2.会一直占着内存不释放 函数多个return值,那么会把这几个return的值都放在一个元组里面,然后返回 1 def hello(a,b,c,d): 2 return a,b,c,d 3 res=hello('ybq','ede','rfv','deq') 4 print(res)#('ybq', 'ede', 'dede', 'deq') 列表推导式: 1 #列表推导式 2 nums=[0,1,3,4,5,6,

Day 22 生成器yield表达式及内置函数(一丢丢)

本日知识点: ################################### #一.上节课复习:在for循环式,调用对象内部的__iter__方法, # 把他们变成了可迭代对象然后for循环调用可迭代对象的__next__方法去取值, # 而且for循环会捕捉StopIteration异常,以终止迭代 ################################### # def func(n): # while n > 0: # yield n # print("*"

2018,7,18_迭代器,生成器与推导式

函数的动态传参 *args 动态接收所有位置参数 **kwargs 动态接收关键字参数 顺序: 位置参数, *args, 默认参数, **kwargs def func(*args, **kwargs): 可以接收任何参数 pass global和nonlocal global: 在函数内部引入全局变量. nonlocal: 在函数内部. 内层函数访问外层函数中的局部变量 globals() 查看全局作用域中的名字 locals() 查看当前作用域中的名字 1, 函数名的应用,第一类对象 函数名

写一个二维数组排序算法函数,能够具有通用性,可以调用php内置函数

下面代码没有认真看: <?php //二维数组排序, $arr是数据,$keys是排序的健值,$order是排序规则,1是升序,0是降序 function array_sort($arr, $keys, $order = 0) { if (!is_array($arr)) { return false; } $keysvalue = array(); foreach ($arr as $key => $val) { $keysvalue[$key] = $val[$keys]; } if ($

Day03---集合,函数,三目运算,lambda表达式,内置函数,文件操作

第一节,集合    除了之前学过的数据类型,int,str,bool,list,dict,tuple,还有一个基本数据类型-集合,集合是一组无序,不重复的序列.由于这个特性,所以集合的元素也可以作为字典的键. 1.集合的创建 cast = set() #创建空集合 2.集合的操作 add()  #一次只能添加一个元素 update()  #一次能添加多个元素 clear()  #清空一个集合 copy()  #拷贝一个集合 difference() #比较两个集合,生成一个新的前面存在后面不存在