一、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函数之迭代器相关推荐

  1. python—函数进阶-迭代器

    迭代:可以理解成循环,迭代一次,循环一次 根据所学知识我们知道,直接作用于for循环的数据类型有: 一是集合数据类型,如str , list, tuple, dict, set等 一类是generat ...

  2. python函数名第一类方法、f-string格式化、迭代器及递归函数

    函数第一类方法 函数名可以赋值给其他变量 def func():print(1) a = func a() # 结果:1 函数名可以当做容器类的元素 def func1():print(1) def ...

  3. python3 next_对Python 3.2 迭代器的next函数实例讲解

    在python中,使用iter函数可以获得有序聚合类型的迭代器,我个人将迭代器理解为带有next指针的单向链表,获取到的迭代器为链表的表头,表头内容为空,next指针指向有序聚合类型的第一个元素.在访 ...

  4. python 函数可以作为容器对象的元素_11.Python初窥门径(函数名,可迭代对象,迭代器)...

    python(函数名,可迭代对象,迭代器) 一.默认参数的坑 # 比较特殊,正常来说临时空间执行结束后应该删除,但在这里不是. def func(a,l=[]): l.append(a) return ...

  5. Python开发——函数【迭代器、生成器、三元表达式、列表解析】

    递归和迭代 小明问路篇解释说明 递归:小明-->小红-->小于-->小东:小东-->小于-->小红-->小明 小明向小红问路,因小红不知道,所以向小于问路,因小于不 ...

  6. python之路---迭代器和生成器

    阅读目录 楔子 python中的for循环 可迭代协议 迭代器协议 为什么要有for循环 初识生成器 生成器函数 列表推导式和生成器表达式 本章小结 生成器相关的面试题 返回顶部 楔子 假如我现在有一 ...

  7. python生成器和迭代器作用_浅谈Python中的生成器和迭代器

    迭代器 迭代器协议 对象必须提供一个next方法,执行该方法要么返回迭代中的下一项,要么返回一个异常来终止本次迭代.(只能往前走,不能往后退!) 迭代器对象 遵循了(实现了)迭代器协议的对象.(对象内 ...

  8. python哪些类型可以作为迭代器_详解Python迭代和迭代器

    我们将要来学习python的重要概念迭代和迭代器,通过简单实用的例子如列表迭代器和xrange. 可迭代 一个对象,物理或者虚拟存储的序列.list,tuple,strins,dicttionary, ...

  9. Python教程:迭代器的正确使用方法

    迭代器是可以迭代的对象. 在本教程中,您将了解迭代器的工作原理,以及如何使用__iter__和__next__方法构建自己的迭代器. 迭代器在Python中无处不在. 它们优雅地实现在循环,推导,生成 ...

最新文章

  1. colab出现input output error问题
  2. C++ Editbox换行问题
  3. struts2服务端与android交互
  4. CentOS 6.5下利用Rsyslog+LogAnalyzer+MySQL部署日志服务器
  5. 无聊 乱写写 CSDN博客挺好玩的 确实
  6. Mysql数据库常用分库和分表方式
  7. JSK-61 二进制加法【大数】
  8. 简单的nios II 流水灯 软件部分
  9. GeoServer地图开发解决方案(二):地图数据处理篇
  10. sql plus能登录 plsqldev 登录提示 无法解析指定的连接标识符/PLSQL Developer的安装目录不能带括号/win10安装Oracle PLSQL Developer不能登录
  11. 计算机二级未来教育押题准吗,计算机二级快速通关秘籍,21%的合格率真相原来是这样!...
  12. IDEA配置maven本地仓库
  13. android登录界面素材,2014年国外30个精美APP登录界面UI设计欣赏
  14. java标签用setbounds,java-摆动setResizable和setBounds
  15. Spring源码解析二之创建Bean(实例化)
  16. win10锁屏界面无法更换图片(亲测有效)
  17. JavaScript下雨效果
  18. 携程、艺龙、酷讯演绎在线旅游三国志
  19. excel日期日月年转换为年月日
  20. 静态成员和非静态成员的区别

热门文章

  1. java对象转json jackson_将Jackson对象转换为JSONObject java
  2. idea让字体更圆滑
  3. python课程设计 文字游戏 魔塔1
  4. 真香系列:cdhkafka打开的文件描述符临界阈值
  5. SpringMVC数据验证——第七章 注解式控制器的数据验证、类型转换及格式化——SpringMVC
  6. 点到直线的垂直交点坐标(斜率必须存在)
  7. 和ESP8266 Arduino谈场恋爱 03 玩几个例程
  8. MySQL零基础从入门到精通(函数篇)
  9. 软考中级程序设计师复习——软件工程(4)
  10. 学会百度站长工具主动推送,解决文章不被百度收录或者被他人抄袭排在首页