一.第一类对象

  第一类对象 -> 函数名 -> 变量名

1.特征:

      函数对象可以像变量一样进行赋值

      还可以作为列表的元素进行使用

      还可以作为返回值返回

      还可以作为参数进行传递

def warpper():
def inner():
print("666")
print("inner")
return inner
ret = warpper() # warpper() 返回值是inner 也就是inner 调用再加()
print(ret())
ret()  

二.闭包

闭包 -> 函数的嵌套              内层函数对外层函数中的变量的使用

1.  初级的闭包

f warpper():
name = "zhou" # 局部变量常驻在内存
def inner():
print(name) # 在内层函数中使用了外层函数的局部变量
return inner
ret = warpper() # ret = inner
ret()

2.闭包的优点

   1.保护变量不被侵害. (如果需要的变量在全局,任何函数都能调用)

  2.让变量常驻内存.(个人理解   当ret = warpper()时   是把warpper函数剥去,这样name就类似全局中的变量,就常驻内存了)

3.查看闭包

  __closure__ : 返会东西就是闭包,返回None就不是闭包

def wapper():
name = "alex"
def inner():
print("123")
print(inner.__closure__) # 查看是否闭包,有内容就是闭包,返回None就不是闭包
return inner
wapper() 

三.迭代器

一个数据类型中包含了__iter__函数表示这个数据是可迭代的

1.判断迭代器和可迭代对象的方案

    1.dir(数据):返回这个数据可执行的所有操作

      用dir来查看,   __iter__       有这个就是可迭代的

              __iter__    __next__    有这两个就是 迭代器

  2.官方的判断

       在 collections中 导入   Iterable     Iterator 包

    isinstance(对象,Iterable)      判断是不是可迭代的

    isinstance(对象,Iterator)  判断是不是迭代器

  3.关系

    可迭代包含迭代器    也就是迭代器一定是可迭代的,可迭代的不一定是迭代器.

from collections import Iterator ,Iterable

lst = []
t = lst.__iter__()
#迭代器一定可迭代 可迭代的不一定是迭代器
print(isinstance(lst,Iterable)) # xxx是否是xxx类型的
print(isinstance(t,Iterator)) #判断是不是迭代器

2.模拟for循环

用 __iter__   拿到迭代器

用 __next__  来拿下一个

lst = ["贾樟柯", "李安", "杨德昌", "王家卫"]
# for i in lst:
# print(i)
t = lst.__iter__() #拿到迭代器 是一个地址
while 1 :
try:
print(t.__next__()) #循环着拿数据
except StopIteration: # 拿完的时候会遇到Stopiteration错误
break

3.特征

    1.省内存

  2.惰性机制

  3.只能向前,不能后退

python第一类对象,闭包,迭代器的更多相关文章

  1. python 第一类对象 闭包 迭代器

    ########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...

  2. python 函数名的应用(第一类对象),闭包,迭代器

    1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...

  3. 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器

    一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...

  4. Python_Mix*函数名的使用以及第一类对象,闭包,迭代器,for循环的内部机制

    一:函数名的应用(第一类对象) 函数名的命名规范和变量是一样的,函数名其实就是变量名, 0)函数名可以赋值给其他变量 def func(): #定义一个名为func的函数 print('my ange ...

  5. day11 第一类对象 闭包 迭代器

    今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象  : 函数对象介意向变 ...

  6. 完全理解 Python 迭代对象、迭代器、生成器(转)

    完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...

  7. 完全理解 Python 迭代对象、迭代器、生成器

    完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun    本文源自RQ作者 ...

  8. python记录_day11 闭包 迭代器

    一.第一类对象: 函数名是一个变量,可以当普通变量使用,但它又是一个特殊的变量,与括号配合可以执行函数. 函数名的运用 1.单独打印是一个内存地址 2.可以给其他变量赋值 3.可以作为容器类变量的元素 ...

  9. 完全理解Python迭代对象、迭代器、生成器

    在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...

随机推荐

  1. Nginx的配置文件nginx.conf配置详解

    user nginx nginx; #Nginx用户及组:用户 组.window下不指定 worker_processes 8; #工作进程:数目.根据硬件调整,通常等于CPU数量或者2倍于CPU. ...

  2. Dbutils 的JDBC链接

    最近实践周,再次用到了这个Apache的开源工具包就在次对着个方面进行了复习 1.JDBC的基本 操作姿势 2.JDBC的步骤是 1.添加驱动包 Class.forName("oracle. ...

  3. Cisco ASR1002-X告警处理

    客户反馈其机房的ASR100X告警,拍照如下图: 处理步骤: 查看日志未发现异常 查看CPU/内存/风扇未发现异常 3.清除告警#clear facility alarm依旧告警 4.shutdown ...

  4. ES5之函数的间接调用 ( call、apply )、绑定 ( bind )

    call().apply()的第一个实参是函数调用的上下文,在函数体内通过this来获得对它的引用. call()将实参用逗号分隔:apply ()将实参放入数组.类数组对象中. function h ...

  5. [LeetCode_96] Unique Binary Search Trees

    题目链接 https://leetcode.com/problems/unique-binary-search-trees/ 题意 计算给定节点数的BST有多少种 思路 递归 相关知识 二叉搜索树(B ...

  6. 【C++ const_cast强制转换】

  7. 20165315 C语言学习情况与Java学习目标

    20165315 C语言学习情况与Java学习目标 一.出色技能的获取经验 我从小便是一个中规中矩的人,在很多方面都是让成绩尽量保持在前百分之二十到三十这个范围内,比如我比较擅长的唱歌和乒乓球,但也不 ...

  8. HTML5拖拽事件笔记

    在HTML5的规范中,我们可以通过为元素增加`draggable="true"`来设置此元素是否可以进行拖拽操作,其中图片.链接默认是开启的. 1. 拖拽元素:设置了`dragga ...

  9. Bootstrap(6)图标菜单按钮组件

    一.小图标组件 Bootstrap 提供了免费的 263 个小图标(数了两次),具体可以参考中文官网的组件链接:http://v3.bootcss.com/components/#glyphicons ...

  10. mysql中各种join连表查询总结

    通常我们需要连接多个表查询数据,以获取想要的结果. 一.连接可以分为三类: (1) 内连接:join,inner join (2) 外连接:left join,left outer join,righ ...