day12.生成器;wraps初识
生成器
在 Python 中,使用了 yield 的函数被称为生成器(generator)。
跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。
在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。
调用一个生成器函数,返回的是一个迭代器对象。
def generator():
print(1)
yield 'a'
print(2)
yield 'b'
print(3)
yield 'b' ret = generator()
print(ret.__next__())
print(ret.__next__())
print(ret.__next__())
for i in ret:
print(i) 用三次next方法执行和for循环执行这个生成器结果是一样的
# 只要含有yield 的函数都是生成器函数
# yield 和return 不能共用
# 生成器函数:执行之后会得到一个生成器作为返回值
生成器的简单应用:
做一个简单的文件监听器
函数方法:
def tail(filename):
with open(filename,encoding='utf-8') as f:
while True:
line = f.readline()
if line.strip():
print(line.strip())
tail('file') 这个方法虽然能够满足我们监听文件的功能。但是如果我们需要对监听到的行进行操作呢?需要修改原函数,不满足开放封闭原则
例如:我们只想取包含python关键字的行,
例如:我们想对新生成的行进行修改
用生成器的方法:
def tail(filename):
with open(filename,encoding='utf-8') as f:
while True:
line = f.readline()
if line.strip():
yield line.strip()
ret = tail('file')
# 这是我们就拿到了一个生成器 ret,可以对他进行一系列操作。此时我们也可以接着监控我们的文件。
# print('***',ret.__next__()) # 这里对新的一行进行操作
# for i in ret:
# print('***',i)
for i in ret:
if 'python' in i:
print('这是我想要的关键字:',i) # 这里我们取到关键字的行并修改。且没有修改原函数
这是我想要的关键字: ssspython
这是我想要的关键字: hello,python
wraps
from functools import wraps
def wrapper(func): #func = holiday
@wraps(func) # 带参数的装饰器
def inner(*args,**kwargs):
print('在被装饰的函数执行之前做的事')
ret = func(*args,**kwargs)
print('在被装饰的函数执行之后做的事')
return ret
return inner @wrapper #holiday = wrapper(holiday)
def holiday(day):
'''这是一个放假通知'''
print('全体放假%s天'%day)
return '好开心' print(holiday.__name__)
print(holiday.__doc__)
ret = holiday(3) #inner
print(ret)
# 带参数的装饰器不会影响装饰器函数与被装饰函数的打印,很厉害 # def wahaha():
# '''
# 一个打印娃哈哈的函数
# :return:
# '''
# print('娃哈哈') # print(wahaha.__name__) #查看字符串格式的函数名
# print(wahaha.__doc__) #查看函数注释
day12.生成器;wraps初识的更多相关文章
- day12——生成器、推导式、简单内置函数
day12 生成器 迭代器:python中内置的一种节省空间的工具 生成器的本质就是一个迭代器 迭代器和生成器的区别:一个是pyhton自带的,一个是程序员自己写的 写一个生成器 基于函数 在函数中将 ...
- 记录我的 python 学习历程-Day12 生成器/推导式/内置函数Ⅰ
一.生成器 初识生成器 生成器的本质就是迭代器,在python社区中,大多数时候都把迭代器和生成器是做同一个概念. 唯一的不同就是: 迭代器都是Python给你提供的已经写好的工具或者通过数据转化得来 ...
- python学习打卡 day12 生成器
本节主要内容 : 生成器 生成器函数 各种推导式 生成器表达式 一.生成器 什么是生成器.生成器的本质就是迭代器. 在python中有三种方式来获取生成器: 1.通过生成器函数 2.通过各种推导式来实 ...
- day12 生成器和各种推导式
今天主要学习了 1.生成器 2.生成器函数 3.各种推导式(比较诡异,理解了很简单,不理解很难) 4.生成器表达式(重点) 一.生成器 def func(): print'我叫周润发' return ...
- python基础学习Day12 生成器、列表推导式、字典的表达式、字典键值对的互换、集合推导式
一.生成器 1.1 生成器:就是(python)自己用代码写的迭代器,生成器的本质就是迭代器. 1.2 生成器函数 def func1(x): x += print() yield x print() ...
- day12生成器
迭代器 __iter__() 获取迭代器 __next__() 下一个 生成器 本质就是迭代器 两种方式写生成器 1. 生成器函数 2. 生成器表达式 生成器函数 函数内部有yield. yield返 ...
- python之生成器的初识
1. 生成器的定义 生成器的本质就是迭代器.python社区生成器和迭代器是一种 2. 生成器和迭代器区别 迭代器: 都是Python给你提供的已经写好的工具或者通过数据转化得来的 生成器: ...
- python基础之协程函数、列表表达式、生成器表达式
一.协程函数 协程函数的定义?如果在一个函数内部yield的使用方式是表达式形式的话,如x=yield,那么该函数称为协程函数 协程函数补充: def init(func): def wrapper( ...
- python基础 Day12
python Day12 生成器python社区,生成器与迭代器看成一种.生成器的本质就是迭代器. 区别:生成器是我们自己用python代码构建的数据结构.迭代器都是提供的,或者转化得来的. 获取生成 ...
随机推荐
- openstack oslo.messaging库
openstack oslo.messaging库 2017年04月13日 22:13:25 li_101357 阅读数:1383 版权声明:本文为博主原创文章,未经博主允许不得转载. https ...
- C#操作session的类实例(转)
using System.Web; namespace DotNet.Utilities { public static class SessionHelper2 { /// <summary& ...
- Qt中实现将float类型转换为QString类型
在使用Qt Creator编程时,难免会用到将float类型转换为QString类型的时候下面是我所有的方法: 1. 将QString类型转化为float类型,很简单 QString data; fl ...
- Day 3 下午
依旧是组合数问题 先来看一道题 如图,一个n*m的方格中,从原点开始,每次只能向上走或者向右走,求走到点(n,m)共有多少种走法 一般做法: 一个一个写,每一个节点的种数=它左边的数量+右边的数量 显 ...
- Makefile 常用函数表
Makefile 常用函数表 一.字符串处理函数1.$(subst FROM,TO,TEXT)函数名称:字符串替换函数—subst.函数功能:把字串“TEXT”中的“FROM”字符替换为“TO”.返 ...
- python实现域名解析和归属地查询
前言工作中有时要查询域名解析和获取域名相关IP归属地信息 安装依赖python2:pip install dnspythonpython3:python3 -m pip install -i http ...
- openstack——删除网络
#!/bin/bash #delete vm for vim in `nova list |awk '{if( NR > 2 ) {print $2}}'`;do nova delete $vi ...
- 飞旋treap
虽然叫做非旋treap但是飞旋treap很带感所以就用这个名字了(SB) 这个东西是真的好写...... 主要的两个函数只有两个,rotate和splay,split和merge. merge就是大家 ...
- solr的基础和安装
下载地址 http://archive.apache.org/dist/lucene/solr/ 推荐 http://www.apache.org/dyn/closer.lua/lucene/so ...
- Linux运维(首页)
系统学习,以此见证学习历程 Linux运维基础 安装vmware+centos Linux基础 Linux的一些问题 Ubuntu遇到的bug linux_网易云音乐安装 linux_添加图标 遇到的 ...