第一类对象 -----函数名  == 变量名
函数对象可以像变量一样进行赋值
还可以作为列表的元素进行使用
可以作为返回值返回
def wrapper():
    def inner():
        print("哈哈哈")
    return inner  # 函数名可以像返回值一样返回
 
ret = wrapper()
ret() # 在函数外面访问了函数内部的函数
函数可以进行参数进行传递
def func1():
    print("朱祁镇")
 
def func2():
    print("徐阶")
 
def func3():
    print("王阳明")
 
def func4():
    print("魏忠贤")
 
lst = [func1, func2, func3, func4] # 函数+() 就是调用.
print(lst)    ###function func2 at 0x000001A53FB298C8>, <function func3 at 0x000001A53FB29950>, <function func4 at 0x000001A53FB299D    是一个内存地址
lst = [func1(), func2(), func3(), func4()]     ##函数是调用的,没有retrun返回的是None
print(lst)
###朱祁镇
徐阶
王阳明
魏忠贤
[None, None, None, None]
函数外面的访问了函数内部的函数
def wrapper():
    def inner():
        print("哈哈哈")
    return inner   ###函数名可以像返回值一样返回
ret = wrapper()
ret()  ##在函数外面方位了函数内部的函数
闭包------函数的嵌套
      内层函数中使用外层函数的变量
优点:1.保护变量不被其他人侵害
         2.保持一个变量常驻内存
超级简易版爬虫
from urllib.request import urlopen # 导入一个模块
# 干掉数字签名
import ssl
ssl._create_default_https_context = ssl._create_unverified_context
 
 
def func():
    # 获取到网页中的内容, 当网速很慢的时候. 反复的去打开这个网站. 很慢
    content = urlopen("https://www.dytt8.net/").read()
 
    def inner():
        return content.decode("gbk") # 网页内容
    return inner
 
print("开始网络请求")
ret = func() # 网络请求已经完毕
print("网络请求完毕")
print("第一次", ret()[5])   ret()就是return返回的值,调用inner函数
print("第二次", ret()[5])
如何查看一个是闭包
  __closure__ 有东西就是闭包,没有东西就不是闭包
迭代器---固定的思路.for循环
一个数据类型中包含了__iter__函数表示这个数据是可迭代的
dir(数据): 返回这个数据可以执行的所有操作
判断迭代器和可迭代对象的方案(野路子)
        __iter__            可迭代的
        __iter__  __next__  迭代器
lst = ['贾樟柯', '利安', '杨德昌', '王家卫']
it = lst.__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())    ###StopIteration    停止迭代
#想回去
it = lst.__iter__()     #只能重新获取迭代器
 判断迭代器和可迭代对象的方案(官方)
        from collections import Iterable, Iterator
        isinstance(对象, Iterable) 是否是可迭代的
        isinstance(对象, Iterator) 是否是迭代器
官方通过代码判断是否是迭代器
借助于两个模块 Iterator迭代器, Iterable可迭代的
from collections import Iterable, Iterator
 
lst = [1,2,3]
# print(lst.__next__())
 
print(isinstance(lst, Iterable)) # xxx是否是xxx类型的. True
print(isinstance(lst, Iterator)) # False
 
it = lst.__iter__()  # 迭代器一定可迭代,  可迭代的东西不一定是迭代器
 
print(isinstance(it, Iterable)) # xxx是否是xxx类型的. True
print(isinstance(it, Iterator)) # True
 
for el in it:
    print(el)
结束的时候给我们扔出来一个错误stopiteration
模拟for循环
lst= []
# 拿迭代器
it = lst.__iter__()    #获取迭代器
while 1:
    try:     #尝试
        el = it.__next__()    #数据
        print(el)
    except StopIteration:    #####出错误,意味着数据拿完了
        break   #退出循环
特征:
            1. 省内存(生成器)
            2. 惰性机制
            3. 只能向前. 不能后退
整合所有的数据类型进行遍历(int,bool除外)
想回去:只能重新获取迭代器
print(dir(bool)) # 没有__iter__
for i in True: # 'bool' object is not iterable
    print(i)
 
print(dir(range))
f = open("呵呵", mode="r", encoding="utf-8")
print(dir(f))
 
共性:所有带有__iter__的东西都可以进行for循环, 带有__iter__的东西就是可迭代对象
 
lst = ["贾樟柯", "李安", "杨德昌", "王家卫"]
 
# 1. 只能向下执行, 不能反复
# 2. 结束的时候会给我们扔出来一个错误 StopIteration
# 3. 整合所有的数据类型进行遍历(int,bool除外)
 
# print("__iter__" in dir(lst))
it = lst.__iter__()  # 拿到的是迭代器 <list_iterator object at 0x0000000001DCC160>
 
print(it.__next__()) # 下一个
print(it.__next__()) # 下一个
print(it.__next__()) # 下一个
print(it.__next__()) # 下一个
# print(it.__next__()) # 下一个 # StopIteration 停止迭代
# 想回去
it = lst.__iter__() # 只能重新获取迭代器
 
s = {"张无忌", "贾樟柯", "宝宝", "风扇哥", "门神"}
it = s.__iter__()
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
print(it.__next__())
 

day 11 前方高能-迭代器的更多相关文章

  1. JAVA编程思想(第四版)学习笔记----11.5 List,11.6迭代器

    Collection类的层次结构图(来源与网络)如下所示: 接口:Iterator<T> public interface Iterable<T> Iterable<T& ...

  2. 11.C#迭代器(六章6.1)

    今天我们说下C#中的迭代器,首先引出一些关于迭代的概念,后面举出代码供大家讨论. 迭代器模式是行为模式的一种范例,行为模式是一种简化对象之间通信的一种设计模式.在.NET中使用IEnumerator和 ...

  3. python学习第11天 迭代器

    函数的名称 闭包 迭代器 递归

  4. Python【day 11】迭代器

    迭代器-用 1.迭代器的概念 1.可迭代对象-iterable str.list.tuple.dict.set.open().range() 2.可迭代对象的概念: 其数据类型的执行方法中含有__it ...

  5. python全栈开发- 前⽅⾼能-迭代器

    python_day_12 今日主要内容 1, 函数名的应用,第一类对象 函数名可以像变量一样进行使用 1.赋值 2.作为list元素 3.作为参数 4.作为返回值 2, 闭包 内部函数访问外部函数的 ...

  6. Java编程思想(11~17)

    [注:此博客旨在从<Java编程思想>这本书的目录结构上来检验自己的Java基础知识,只为笔记之用] 第十一章 持有对象 11.1 泛型和类型安全的容器>eg: List<St ...

  7. day13: 迭代器和生成器

    1,思考所有可以被for循环的:list,tuple,set,dict,range,enumerate,f,str,差不多了,为何这些数据类型可以被for循环呢? 2,一个标准的装饰器函数 from ...

  8. STL基础--迭代器和算法

    1 迭代器 Iterators 5种迭代器类型 随机访问迭代器: vector, deque, array // 允许的操作 vector<int> itr; itr = itr + 5; ...

  9. C++模板实战6:迭代器

    1 迭代器的类型: 输入迭代器 .前向迭代器.双向迭代器.跳转迭代器以及输出迭代器.这五种迭代器的限制条件从左至右越来越强. 2 输入迭代器需满足的条件: X u(a); X可复制构造 u=a; 可赋 ...

随机推荐

  1. RecyclerView打造通用的万能Adapter

    既然想做到通用那么现在摆在面前的就三个问题:数据怎么办?布局怎么办? 绑定怎么办?.数据决定采用泛型,布局打算直接构造传递,绑定显示效果肯定就只能回传. 1 基本改造 数据决定采用泛型,布局打算直接构 ...

  2. 平衡树、AVL树

    平衡树 平衡树有AVL树.红黑树.2-3树.2-3-4树 AVL树 AVL树是最早的一种平衡树,它以发明者的名字命名:AVL是一种特殊的二叉搜索树,平移保证二叉搜索树的正确. 特征 在AVL树中节点的 ...

  3. [Android] 压缩图片并保存

    不难,但用的时候有时候突然会想不起来..记录一下吧 原文地址请保留http://www.cnblogs.com/rossoneri/p/3995096.html 先加权限 <uses-permi ...

  4. 分享一个android debug模式,出现 waiting for debugger把界面卡住,取巧的解决办法

    使用android studio开发程序时,有时会出现 waiting for debugger 卡住界面,软件无法正常debug运行的情况,很多网友分享了一些解决办法,比如: 1 打开cmd进入命令 ...

  5. LeetCode 题解之Rotate List

    1.题目描述 2.题目分析 首先数出链表中的元素个数count,然后对k = k % count 求余数.接着将链表形成一个环,从最后一个元素开始,运动 count - k  步,此时节点的下一个节点 ...

  6. Prometheus Node_exporter 之 Memory Detail Vmstat Counters

    Memory Detail Vmstat Counters 1. Memory Page Active type: GraphUnit: shortLabel: PagesActive_anon - ...

  7. 灰度发布:灰度很简单,发布很复杂&灰度发布(灰度法则)的6点认识

    什么是灰度发布,其要点有哪些? 最近跟几个聊的来的同行来了一次说聚就聚的晚餐,聊了一下最近的工作情况如何以及未来规划等等,酒足饭饱后我们聊了一个话题“灰度发布”. 因为笔者所负责的产品还没有达到他们产 ...

  8. SqlServer中sqlmaint 实用工具和xp_sqlmaint扩展过程

    sqlmaint 实用工具可以对一个或多个数据库执行一组指定的维护操作.使用 sqlmaint,可以运行 DBCC 检查.备份数据库及其事务日志.更新统计以及重建索引.所有数据库维护活动都会生成报表, ...

  9. JAVA 连接 SQL Server 2008:java.lang.ClassNotFoundException: com.microsoft.jdbc.sqlserver.SQLServerDriver

    新项目需要修改Java开发的MES系统...Java忘的也差不多了...简单尝试以下JAVA连接SQL Server吧,没想到坑还是很多的.以前直接连oracle时没有这么多麻烦啊....可能微软和o ...

  10. Hadoop HBase概念学习系列之HMaster服务器(四)

    每台HRegion服务器都会和HMaster服务器通信,HMaster的主要任务就是告诉每个HRegion服务器它要维护哪些HRegion. 当一台新的HRegion服务器登录到HMaster服务器时 ...