python第一类对象,闭包,迭代器
一.第一类对象
第一类对象 -> 函数名 -> 变量名
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第一类对象,闭包,迭代器的更多相关文章
- python 第一类对象 闭包 迭代器
########################总结########################### 1. 函数名 -> 第一类对象 函数名就是变量名. 函数可以赋值 函数可以作为集合类的 ...
- python 函数名的应用(第一类对象),闭包,迭代器
1.函数名的应用(第一类对象) 函数名的命名规范和变量是一样的 函数名其实就是变量名 可以作为列表中的元素进行储存. def func1(): pass def func2(): pass lst = ...
- 巨蟒python全栈开发-第11天 第一类对象 闭包 迭代器
一.今日主要内容总览(重点) 1.第一类对象->函数名=>变量名 (1)函数对象可以像变量一样进行赋值 (2)还可以作为列表的元素进行使用 (3)还可以作为返回值返回 (4)还可以作为参数 ...
- Python_Mix*函数名的使用以及第一类对象,闭包,迭代器,for循环的内部机制
一:函数名的应用(第一类对象) 函数名的命名规范和变量是一样的,函数名其实就是变量名, 0)函数名可以赋值给其他变量 def func(): #定义一个名为func的函数 print('my ange ...
- day11 第一类对象 闭包 迭代器
今日主要内容: 1 . 第一类对象 -->函数名--> 变量名 2. 闭包 -->函数的嵌套 3. 迭代器 --> 固定的思想 for 循环 第一类对象 : 函数对象介意向变 ...
- 完全理解 Python 迭代对象、迭代器、生成器(转)
完全理解 Python 迭代对象.迭代器.生成器 本文源自RQ作者的一篇博文,原文是Iterables vs. Iterators vs. Generators » nvie.com,俺写的这篇文章是 ...
- 完全理解 Python 迭代对象、迭代器、生成器
完全理解 Python 迭代对象.迭代器.生成器 2017/05/29 · 基础知识 · 9 评论 · 可迭代对象, 生成器, 迭代器 分享到: 原文出处: liuzhijun 本文源自RQ作者 ...
- python记录_day11 闭包 迭代器
一.第一类对象: 函数名是一个变量,可以当普通变量使用,但它又是一个特殊的变量,与括号配合可以执行函数. 函数名的运用 1.单独打印是一个内存地址 2.可以给其他变量赋值 3.可以作为容器类变量的元素 ...
- 完全理解Python迭代对象、迭代器、生成器
在了解Python的数据结构时,容器(container).可迭代对象(iterable).迭代器(iterator).生成器(generator).列表/集合/字典推导式(list,set,dict ...
随机推荐
- NumPy 广播(Broadcast)
NumPy 广播(Broadcast) 广播(Broadcast)是 numpy 对不同形状(shape)的数组进行数值计算的方式, 对数组的算术运算通常在相应的元素上进行. 如果两个数组 a 和 b ...
- 205. Isomorphic Strings (Map)
Given two strings s and t, determine if they are isomorphic. Two strings are isomorphic if the chara ...
- oracle 修改数据精度问题
今天,在建表后插入语句时,报了这样的错误,对于这样的错误,搜集了一些资料,进行了总结如下: 建表语句: 1 2 3 4 5 6 7 8 9 create table pre_info( pre_cod ...
- chase
chase 英[tʃeɪs] 美[tʃes] vt. 追求; 追捕; 追寻; 镂刻; n. 追捕; 打猎; 猎物(指鸟兽等); 槽; vi. 追逐,追赶; 追寻; 追求(常与after连用); [口语 ...
- linux命令学习之:sort
sort命令是在Linux里非常有用,它将文件进行排序,并将排序结果标准输出.sort命令既可以从特定的文件,也可以从stdin中获取输入. 语法 sort (选项) (参数) 选项 sort将文 ...
- Bootstrap(1) 概述与环境搭建
视频教程:http://study.163.com/course/courseMain.htm?courseId=1017002 源码和笔记:http://pan.baidu.com/s/1c06Ri ...
- setTimeout设置为0的意义
今天再看 Promise 代码时,有个地方用到了setTimeOut函数,但是第2个参数设为0,顿时懵逼了,这是啥意思? function resolve(newValue) { value = ne ...
- 20.Mysql锁机制
20.锁问题锁是计算机协调多个进程或线程并发访问某一资源的机制. 20.1 Mysql锁概述锁类型分为表级锁.页面锁.行级锁.表级锁:一个线程对表进行DML时会锁住整张表,其它线程只能读该表,如果要写 ...
- hdu 3415(单调队列) Max Sum of Max-K-sub-sequence
题目链接http://acm.hdu.edu.cn/showproblem.php?pid=3415 大意是给出一个有n个数字的环状序列,让你求一个和最大的连续子序列.这个连续子序列的长度小于等于k. ...
- (O)jquery:e.target和this的区别(如何使事件委托后,被选元素的子元素不被选中)
<!DOCTYPE html><html lang="en"><head> <meta charset="UTF-8" ...