Python函数之迭代器
一、Python迭代器
1.1、函数的运用
# 直接使用函数名其打印效果为函数在内存的地址 def f():print("Its Ok")print(f)# 函数名可以直接赋值给一个变量来使用 def f():print("aaaa")print(f)x = f #把函数名赋值给一个变量来使用 print(x())# 把函数名来当一个容器使用 def x():print("aaaa") def y():print("bbbb") def z():print("cccc")lis = [x,y,z] for i in lis:print(i())# 函数名可以当作函数的参数来使用 def x():print("aaaa")def y(z):print("yyyyy")z()print("yyyy...")y(x)# 函数名可以作为函数的返回值 def x():print("aaaa")def y():print("bbb")print("aaa....")return yz = x() print(z())
二、闭包
闭包就是内层函数调用外层函数的变量(非全局)引用为闭包
# 闭包内层函数调用外层的变量a引用就成为闭包 def f():a = "aaaa"def x():print(a)x()print(f())# 闭包内层函数调用外层的变量a引用就成为闭包 def f():a = "aaaa"def x():print(a)x()print(x.__closure__) #其结果显示为cell 非None为闭包,如返回None则不是闭包 print(f())def x():a = "Its OK"def y():print(a)return yz = x() print(z())## def x():def y():a = "111111"def z():print(a)return zreturn yprint(x()()())
三、迭代器
# str、list、dict、tuple、set都是可迭代的对象# dict字典在迭代过程中为Key # 列表 li = [1,2,3,4] print(dir(li)) # 字典 dic = {"x":1,"y":2,"z":3} print(dir(dic)) # 元组 s = ("a","b") print(dir(s)) # 集合 se = (1,2,4,5,5) print(dir(se))# 查看对象是否是可迭代对象,可以通过isintensce()函数来查看对象是什么类型 ls = [1,2,3,4] l = ls.__iter__()from collections import Iterable from collections import Iteratorprint(isinstance(ls,Iterable)) print(isinstance(ls,Iterator)) print(isinstance(l,Iterable)) print(isinstance(l,Iterator))
3.1、for循环机制
x = "收到噶打工啊阿凡达" y = x.__iter__() #获取一个迭代器print(y.__next__()) #依次迭代 获取元素 print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__()) print(y.__next__())
使用while循环和迭代器来模拟for循环机制
ls = [1,2,3,4,5] x = ls.__iter__()while 1:try:y = x.__next__()print(y)except StopIteration:break# Iterable:可迭代对象,包含__iter__()函数 # Iterator:迭代器,包含__iter__()和__next__()函数 # # 迭代器:节省内存,惰性机制,不能反复 只能向下执行.
四、递归函数
是在函数里调用这个函数本身为递归函数,当函数不受外力阻止会一直执行下去,每次调用函数都会产生一个属于自己都命名空间。
此就会占用太多内存空间,为此python将强制递归层数控制在996左右(具体根据个人电脑通过报错信息还来查看,此值不是固定值)
# 通过报错信息来查看递归执行层数 def x(n):print(n)n += 1x(n)x(0)
# 递归循环思路,带入一次函数体,直至满足函数体条件,然后返回retur def f(n):if n == 1:return 40else:return f(n-1)+2print(f(4))
转载于:https://www.cnblogs.com/Matt-Pei/p/10537100.html
Python函数之迭代器相关推荐
- python—函数进阶-迭代器
迭代:可以理解成循环,迭代一次,循环一次 根据所学知识我们知道,直接作用于for循环的数据类型有: 一是集合数据类型,如str , list, tuple, dict, set等 一类是generat ...
- python函数名第一类方法、f-string格式化、迭代器及递归函数
函数第一类方法 函数名可以赋值给其他变量 def func():print(1) a = func a() # 结果:1 函数名可以当做容器类的元素 def func1():print(1) def ...
- python3 next_对Python 3.2 迭代器的next函数实例讲解
在python中,使用iter函数可以获得有序聚合类型的迭代器,我个人将迭代器理解为带有next指针的单向链表,获取到的迭代器为链表的表头,表头内容为空,next指针指向有序聚合类型的第一个元素.在访 ...
- python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...
python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...
- Python开发——函数【迭代器、生成器、三元表达式、列表解析】
递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...
- python之路---迭代器和生成器
阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...
- python生成器和迭代器作用_浅谈Python中的生成器和迭代器
迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...
- python哪些类型可以作为迭代器_详解Python迭代和迭代器
我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange. 可迭代 一个对象,物理或者虚拟存储的序列.list,tuple,strins,dicttionary, ...
- Python教程:迭代器的正确使用方法
迭代器是可以迭代的对象. 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器. 迭代器在Python中无处不在. 它们优雅地实现在循环,推导,生成 ...
最新文章
- colab出现input output error问题
- C++ Editbox换行问题
- struts2服务端与android交互
- CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
- 无聊 乱写写 CSDN博客挺好玩的 确实
- Mysql数据库常用分库和分表方式
- JSK-61 二进制加法【大数】
- 简单的nios II 流水灯 软件部分
- GeoServer地图开发解决方案(二):地图数据处理篇
- sql plus能登录 plsqldev 登录提示 无法解析指定的连接标识符/PLSQL Developer的安装目录不能带括号/win10安装Oracle PLSQL Developer不能登录
- 计算机二级未来教育押题准吗,计算机二级快速通关秘籍,21%的合格率真相原来是这样!...
- IDEA配置maven本地仓库
- android登录界面素材,2014年国外30个精美APP登录界面UI设计欣赏
- java标签用setbounds,java-摆动setResizable和setBounds
- Spring源码解析二之创建Bean(实例化)
- win10锁屏界面无法更换图片(亲测有效)
- JavaScript下雨效果
- 携程、艺龙、酷讯演绎在线旅游三国志
- excel日期日月年转换为年月日
- 静态成员和非静态成员的区别