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

这是老师的博客地址:

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. Ftp上传的方法

    using System;using System.Collections.Generic;using System.IO;using System.Net;using System.Text; na ...

  2. Confluence 6 PostgreSQL 输入你的数据库细节

    在 Confluence 的设置安装向导中,将会指导你 Confluence 如何连接到你的数据库.请确定选择 "My own database". 使用 JDBC 连接(默认) ...

  3. 对<tr><td>标签里的input 循环取值

    需求描述:单击table整行,跳转到具体的信息页面  关键就是获取整行的id,传给后台做查询,返回list 解决思路:用带参数函数传过去id,然后在js的函数中用$("#id"). ...

  4. 【层次聚类】python scipy实现

    层次聚类 原理 有一个讲得很清楚的博客:博客地址 主要用于:没有groundtruth,且不知道要分几类的情况 用scipy模块实现聚类 参考函数说明: pdist squareform linkag ...

  5. Spring Security Filter执行顺序

    1.场景:先走框架过滤器,后走自定义过滤器 @Bean public FilterRegistrationBean resourceFilterRegistration() { FilterRegis ...

  6. 基于concurrent.futures的进程池 和线程池

    concurrent.futures:是关于进程池 和 线程池 的 官方文档 https://docs.python.org/dev/library/concurrent.futures.html 现 ...

  7. Nginx详解二十:Nginx深度学习篇之HTTPS的原理和作用、配置及优化

    一.HTTPS原理和作用: 1.为什么需要HTTPS?原因:HTTP不安全1.传输数据被中间人盗用.信息泄露2.数据内容劫持.篡改 2.HTTPS协议的实现对传输内容进行加密以及身份验证 对称加密:加 ...

  8. 3种vue路由传参的基本模式

    路由是连接各个页面的桥梁,而参数在其中扮演者异常重要的角色,在一定意义上,决定着两座桥梁是否能够连接成功. 在vue路由中,支持3中传参方式. 场景,点击父组件的li元素跳转到子组件中,并携带参数,便 ...

  9. Coding配合git使用时遇到的问题

    转载整理: https://www.jianshu.com/p/b23cd00cffa6 https://www.cnblogs.com/yidoucai/p/5228763.html https:/ ...

  10. vue指令问题

    挂载点:最外层标签就是vue实例的挂载点,即id或者类对应的 dom节点 模板:指挂载点内部的内容,在实例里使用template标签来构 建 h1标签放在body里面不使用 “template”是一样 ...