生成器和迭代器比装饰器简单多了。。。

这是老师的博客地址:

http://www.cnblogs.com/Eva-J/articles/7213953.html

前情回顾:

 #装饰器:
# 在不修改一个函数的调用方式的前提下载一个函数的前后添加功能
#装饰器的生成流程和用法
#自己写装饰器的情况比较少——面试、装饰器的机制 # def wrapper():pass
#
# @wrapper
# def func():pass #流畅的python
#能看懂 —— 别人写的好东西 你能知道 #装饰器的扩展
#周一下午考试
#周二下午:讲考试题、装饰器的扩展 #爬取一个网页
#如果这个网页没有被爬取过,就真的去访问这个网页,否则,返回之前访问的时候存在文件中的内容
from urllib.request import urlopen def wrapper(func):
def inner(*args,**kwargs):
with open('web','rb') as f:
web_content = f.read()
if not web_content:
web_content = func(*args,**kwargs)
with open('web','wb') as f:
f.write(b'aaaaaaaaa'+web_content)
return web_content
return inner # @wrapper
def get_url(url):
content = urlopen(url).read()
return content web_content = get_url('http://www.cnblogs.com/Eva-J/articles/7213953.html')
print(web_content)
# web_content = get_url('http://www.cnblogs.com/Eva-J/articles/7213954.html')
# print(web_content)
# web_content = get_url('http://www.cnblogs.com/Eva-J/articles/7213953.html')
# print(web_content)
#迭代器和生成器 #r 可读 文本操作模式
#w 可写 文本操作模式
#rb 直接操作二进制
#wb 直接操作二进制
# 当你拿到的是纯文字,就用文本操作模式
# 当你拿到的是字节,就用二进制操作的模式 # {'url':'文件名1','url2':''} os #装饰器:
# 在不修改一个函数的调用方式的前提下载一个函数的前后添加功能
#装饰器的本质:闭包函数
# @wrapper #get_url = wrapper(get_url)
# def get_url(url):
# content = urlopen(url).read()
# return content #login :了解原理 :三次登录
#log :必须会 :写到文件里 ——————
#web_content :进阶要求

迭代器

 #迭代器
#列表 字典 元祖 字符串 集合
# for item in 'asfj':pass
# for i in 25:
# print(i)
#'iterable' 可迭代的
# print(dir([]))
# print(dir({}))
# print(dir(5))
#
# print('__iter__' in dir('abc'))
#内部含有__iter__方法的数据类型 就是可迭代的 —— 可迭代协议 ret = 'abc'.__iter__()
# print(ret)
'iterator' #迭代器
#__iter__
#迭代器你可以理解为一个容器,我们从这个容器当中一个接着一个的把值取出来的过程就是迭代的过程
#如何从迭代器中取值
# print(ret.__next__())
# print(ret.__next__())
# print(ret.__next__())
# print(ret.__next__()) #
# l = ['ha','hei','he']
# lst_iter = l.__iter__()
# print(lst_iter.__next__())
# print(lst_iter.__next__())
# print(lst_iter.__next__())
#迭代器的用法
#可迭代的 === 可迭代对象 python一切皆对象
#迭代器
# print(dir(l))
# print('__iter__' in dir(lst_iter))
# print('__next__' in dir(lst_iter))
# print(set(dir(lst_iter)) - set(dir(l)))
# lst_iter.__next__() #可迭代的 必须 含有 __iter__方法 #可迭代协议
#迭代器比可迭代的多一个 __next__方法
#迭代器:包含__next__,__iter__方法 #迭代器协议
# 包含__next__方法的可迭代对象就是迭代器
#迭代器是可迭代的 的一部分
#获得迭代器:可迭代的调用 __iter__()
#使用迭代器:迭代器.__next__() #如何判断一个变量是不是迭代器或者可迭代的
# print('__iter__' in dir([1,2,3,4]))
# print('__next__' in dir([1,2,3,4])) # from collections import Iterable
# from collections import Iterator
# print(isinstance([1,2,3,4],Iterable))
# str_iter = 'abc'.__iter__()
# print(isinstance(str_iter,Iterator))
# print(isinstance('abc',Iterable)) #可迭代的 : __iter__
#迭代器 : __iter__ 和__next__
#迭代器和可迭代的关系 :可迭代的包含迭代器
#迭代器和可迭代的判断 :两种方法 #迭代器的工作原理
l_iter = [1,2,3,4,5].__iter__()
#只是记录当前这个元素和下一个元素
# print('__iter__' in dir(range(10)))
# print('__next__' in dir(range(10)))
# range_iter = range(10).__iter__()
# print(range_iter.__next__())
# print(range_iter.__next__())
#迭代器的特点 —— 迭代器是个好东西
#惰性运算
#从前到后一次去取值,过程不可逆 不可重复
#节省内存 # for item in [1,2,3]:
# pass #list_iter = [1,2,3].__iter__()
#list_iter.__next__() #用while循环模拟for循环的方式 —— for循环是依赖迭代器的,且我们自己也可以仿照着写
# l = [1,2,3,4,5]
# l_iter = l.__iter__()
# while True:
# try:
# print(l_iter.__next__())
# except StopIteration:
# break #for循环是让我们更简单的使用迭代器
#用迭代器取值就不需要关心索引或者key的问题了 #迭代器是个好东西
#目前我们已知的可迭代的都是python提供给我们的
#range()
#f
#enumerate()
#在平时写代码的过程中,我们用for循环就够了 #我自己想写个可迭代的,——生成器
#生成器的本质就是迭代器
#因此生成器的所有好处都和迭代器一样
#但是 生成器是我们自己写的python代码
#生成器的实现由两种方式:
#1.生成器函数
#2.生成器表达式
# def func():
# return ['衣服1','衣服2000000']
#
# ret = func()
# print(ret) #基本数据类型
#文件处理
#函数
#装饰器
#迭代器
#生成器函数 #大作业
# http://www.cnblogs.com/Eva-J/articles/7776508.html

生成器

 #我自己想写个可迭代的,——生成器
#生成器的本质就是迭代器
#因此生成器的所有好处都和迭代器一样
#但是 生成器是我们自己写的python代码
#生成器的实现由两种方式:
#1.生成器函数
#2.生成器表达式
# def func():
# return ['衣服1','衣服2000000']
#
# ret = func()
# print(ret) # def g_func():
# yield 1
#
# g = g_func()
# print(g)
# #generator 生成器 ---> 迭代器
# print(g.__next__())
#生成器函数和普通函数之间的区别
#生成器函数中含有yield关键字
#生成器函数调用的时候不会立即执行,而是返回一个生成器 def g_func():
print('aaaa')
yield 1
print('bbbb')
yield 2
yield 3
#
# g = g_func()
# for i in g:
# print(i)
# print(g.__next__())
# print(g.__next__())
# print(g.__next__()) def cloth():
for i in range(1000000):
yield '衣服%s'%i g = cloth()
for i in range(50):
print(g.__next__()) for i in range(50):
print(g.__next__()) #生成器函数还有一些应用
#生成器表达式

day12 函数的使用方法:初识迭代器和生成器的更多相关文章

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

    本文档主要内容: 一 装饰器函数的信息打印 二 迭代器 三 生成器 四 生成器表达式和列表推导式 五 内置函数 一 装饰器函数的信息打印 一个函数一旦被装饰器给装饰后,这个函数的信息使用原来的命令打印 ...

  2. Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器)

    Python之函数(自定义函数,内置函数,装饰器,迭代器,生成器) 1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数

  3. python函数(5):迭代器和生成器

    迭代器和生成器是函数中的一大重点,务必掌握,何为迭代?何为迭代器? 预习: 处理文件,用户指定要查找的文件和内容,将文件中包含要查找内容的每一行都输出到屏幕 一.迭代器 for i in 50: pr ...

  4. Python之函数目录(自定义函数,内置函数,装饰器,迭代器,生成器)

    1.初始函数 2.函数嵌套及作用域 3.装饰器 4.迭代器和生成器 6.内置函数 7.递归函数 8.匿名函数 9.函数相关定义 10.三元表达式.列表推导式.生成器表达式 11.函数与方法的区别  

  5. 【学习笔记】--- 老男孩学Python,day12 函数名的应用,闭包,迭代器

    1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 def func(): print("你吃了么?") # print(func) # a = func # ...

  6. python 函数之装饰器,迭代器,生成器

    装饰器 了解一点:写代码要遵循开发封闭原则,虽然这个原则是面向对象开发,但也适用于函数式编程,简单的来说,就是已经实现的功能代码不允许被修改但 可以被扩展即: 封闭:已实现功能的代码块 开发:对扩张开 ...

  7. python函数、装饰器、迭代器、生成器

    目录: 函数补充进阶 函数对象 函数的嵌套 名称空间与作用域 闭包函数 函数之装饰器 函数之迭代器 函数之生成器 内置函数 一.函数补充进阶 1.函数对象:  函数是第一类对象,即函数可以当作数据传递 ...

  8. python基础-函数之装饰器、迭代器与生成器

    1. 函数嵌套 1.1 函数嵌套调用 函数的嵌套调用:在调用一个函数的过程中,又调用了其他函数 def bar(): print("from in the bar.") def f ...

  9. 第四天 内置函数2 随机码 装饰器 迭代器、生成器 递归 冒泡算法 JSON

    关于函数的return li = [11,22,33,44] def f1(arg): arg.append(55) li = f1(li) print(li) 因为li = f1(li) 实际赋值的 ...

随机推荐

  1. oracle存储大文本clob、blob

    oracle存储大文本clob.blob 1 package cn.itcast.web.oracle.util; 2 3 import java.sql.Connection; 4 import j ...

  2. python 列表,字典,元组,字符串,常用函数

    飞机票 一.列表方法 1.ls.extend(object) 向列表ls中插入object中的每个元素,object可以是字符串,元组和列表(字符串“abc”中包含3个元组),相当于ls和object ...

  3. 十大web安全扫描工具

    本文来源:绿盟整理  <十大web安全扫描工具> 十大web安全扫描工具 扫描程序可以在帮助造我们造就安全的Web 站点上助一臂之力,也就是说在黑客"黑"你之前, 先测 ...

  4. 《MySQL5.7从入门到精通(视频教学版)》

    · 一:书籍PDF获取途径 pdf 文档 在 此QQ群(668345923) 的群文件里面 学习视频资源 二:书籍介绍 本书主要包括MySQL的安装与配置.数据库的创建.数据表的创建.数据类型和运算符 ...

  5. django模板 内建标签

    autoescape 控制当前自动转义的行为,有on和off两个选项 {% autoescape on %} {{ body }} {% endautoescape %} block 定义一个子模板可 ...

  6. NHibernate入门

    这里是官方的Demo,可以看看,因为我也是通过官方的demo学习的.   https://github.com/nhibernate/nhibernate-core/tree/master/src/N ...

  7. Ubuntu 安装google 拼音

    一.安装fcitx apt-get install fcitx 二.安装google pinyin sudo apt install fcitx-googlepinyin 三. 安装 fcitx-co ...

  8. PDF裁剪页面,PDF怎么裁剪页面的方法

    PDF文件要怎么裁剪页面呢,是不是有很多的小伙们想知道呢,当打开一个PDF文件的时候如果一个页面中有很多的空白页面就会影响文件的美观与使用,今天小编就为大家分享一下小编的裁剪页面的方法. 操作软件:迅 ...

  9. 在线版区间众数 hzw的代码。。

    /* 查询区间众数,要求强制在线 设有T个块 1.众数只可能在大块[L,R]里或者两端[l,L) (R,r]里出现 2.大块的众数只要预处理打表一下即可,复杂度n*T(这样的区间有T*T个) 3.两端 ...

  10. cf1076d 贪心最短路

    #include<bits/stdc++.h> #include<queue> using namespace std; #define maxn 300005 #define ...