python 11 迭代器
1. 第一类对象的特点
#1. 函数名可以当作值被赋值给变量
def func():
print(1)
ret = func
print(ret) #输出func函数的地址
#2. 函数名当作元素存放在容器中
def func():
a=1
print(a)
lst = [func,func,func] #放入lst中
for i in lst:
i() # 1 1 1
#3. 函数名可以当作函数的参数
def func(f):
print(1)
f()
def foo():
print(2)
func(foo) #foo地址给f 1 2
#4. 函数名可以当作函数的返回值
def func():
print(2)
def foo():
print(5)
return foo
ret = func() #foo 地址 2 5
ret() #调用 foo函数
2. 格式化
f"你好{'a'}" #填充字符串
F"你好{'a'}" # F
s = f"你好{s1}" #填充变量
s = f"{35+15}" #填充计算公式
s = f"{a if a > b else b}" #填充表达式
s = f"{lst[0:2]}" #填充列表和字典
3.迭代器
3.1 可迭代对象
list、dic、str、set、tuple都是可迭代对象,使用灵活
#方法:
1. list__iter__()
2.ctrl 查看源码
3. print(dir(list))
官方声明:只要对象具有__iter__()方法的就是迭代对象
可迭代对象的优点:
1.使用灵活
2.直接查看值
可迭代对象的缺点:消耗内存
取值方式:
list,tuple,str -- 索引
dict -- 键
set -- 直接取值
3.2 迭代器
#官方声明只要具有__iter__()方法__next__()方法就是迭代器
lst = [1,2,3,4,6]
new_lst = lst.__iter__() #将可迭代对象转换成迭代器
print(new_lst.__next__()) #从上一个位置开始向下打印一个元素
#迭代器取值超出范围时,会报错
#迭代器特性:
#1.一次性的(用完就没有了)
#2.不能逆行(不能后退)
#3.惰性机制(节省内存)
#迭代器什么时候用:当容器数据量较大时,使用迭代器
# while循环实现for循环的本质
s = "12345"
new_s = s.__iter__()
while True:
try: #会处理错误
print(new_s.__next__()) # for真实本质
except StopIteration: #当出StopIteration错误时,关闭
break
#或
except Exception: #万能异常捕获错误
break
4. 递归
1. 不断调用自己本身(自己调用自己)——死循环
最大层次1000,实际测试997/998
2. 有明确的终止条件
满足以上两个才是有效递归。
递:一直执行直到碰到结束条件
归:从结束条件开始往回退
def age(n):
if n == 3:
return 30
else:
return age(n+1)-5
print(age(1)) # 20
#上面解开:
def age3(n):
if n == 3:
return 30
# else:
# return age2(n+1)-5
def age2(n):
if n == 3:
return 30
else:
return age3(n+1)-5
def age1(n):
if n == 3:
return 30
else:
return age2(n+1)-5
print(age1(1))
python 11 迭代器的更多相关文章
- python之迭代器与生成器
python之迭代器与生成器 可迭代 假如现在有一个列表,有一个int类型的12345.我们循环输出. list=[1,2,3,4,5] for i in list: print(i) for i i ...
- python基础——迭代器
python基础——迭代器 我们已经知道,可以直接作用于for循环的数据类型有以下几种: 一类是集合数据类型,如list.tuple.dict.set.str等: 一类是generator,包括生成器 ...
- python基础—迭代器、生成器
python基础-迭代器.生成器 1 迭代器定义 迭代的意思是重复做一些事很多次,就像在循环中做的那样. 只要该对象可以实现__iter__方法,就可以进行迭代. 迭代对象调用__iter__方法会返 ...
- Python:迭代器的简单理解
一.什么是迭代器 迭代,顾名思义就是重复做一些事很多次(就现在循环中做的那样).迭代器是实现了__next__()方法的对象(这个方法在调用时不需要任何参数),它是访问可迭代序列的一种方式,通常其从序 ...
- 第十六篇 Python之迭代器与生成器
一.迭代器 一. 递归和迭代 生活实例说明什么是递归和迭代 A想去腾达大厦,问B怎么走路,B 说我不知道,我给你问问C,C也不知道,C又去问D,D知道,把路告诉了C,C又告诉B,B最后告诉A, 这就是 ...
- python——iterator迭代器|iterator详解——20140918|
-----------------------------------------------------------------------------前言--------------------- ...
- 搞清楚 Python 的迭代器、可迭代对象、生成器
很多伙伴对 Python 的迭代器.可迭代对象.生成器这几个概念有点搞不清楚,我来说说我的理解,希望对需要的朋友有所帮助. 1 迭代器协议 迭代器协议是核心,搞懂了这个,上面的几个概念也就很好理解了. ...
- python函数-迭代器&生成器
python函数-迭代器&生成器 一.迭代器 1 可迭代协议 迭代:就是类似for循环,将某个数据集内的数据可以“一个挨着一个取出来” 可迭代协议: ① 协议内容:内部实现__iter__方法 ...
- python --- 11 第一类对象 函数名 闭包 迭代器
一 .函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当做容器类 ...
随机推荐
- cve-2018-14515复现
一.环境 Windows NT WIN-RRI9T9SN85D 6.1 build 7600 (Windows 7 Business Edition) i586 Apache/2.4.23 (Win3 ...
- Java常用命令及参数
Java的基本指令参数 javac [-d 目录|-verbose] file java [-classpath(cp) dir] file jar -zcvf dir file javap [-pr ...
- 初探Oracle全栈虚拟机---GraalVM
官方说明: GraalVM是一个生态系统和共享运行时,不仅提供基于JVM的语言(如Java,Scala,Groovy和Kotlin)的性能优势,还提供其他编程语言(如JavaScript,Ruby,P ...
- 关于object对象转换为int类型
注意:不能强制转换!!! Object a; int b = Integer.parseInt(String.valueOf(a));
- Spark Streaming消费Kafka Direct保存offset到Redis,实现数据零丢失和exactly once
一.概述 上次写这篇文章文章的时候,Spark还是1.x,kafka还是0.8x版本,转眼间spark到了2.x,kafka也到了2.x,存储offset的方式也发生了改变,笔者根据上篇文章和网上文章 ...
- Linux进程间通信——信号
一.认识信号 信号(Signals)是Unix.类Unix以及其他POSIX兼容的操作系统中进程间通讯的一种有限制的方式.它是一种异步的通知机制,用来提醒进程一个事件已经发生.当一个信号发送给一个进程 ...
- golang文档、中文、学习文档
Golang中文文档地址 http://zh-golang.appspot.com/doc/ Golang非英文文档地址: https://github.com/golang/go/wiki/NonE ...
- Zabbix利用Windows性能监视器监控各项资源指标
zabbix自带的windows监控模板并没有监控windows cpu使用率的监控 在cmd命令输入perfmon 打开后默认就一项CPU占用的监控,下面以添加硬盘空闲时间做示例 1:监控图形上面右 ...
- 【Java笔记】【Java核心技术卷1】chapter3 D5运算符
package chapter3; import java.math.*; //引入数学类 //枚举类型 enum Size{SMALL,MEDIUM,LARGE}; public class D5运 ...
- [Apache Pulsar] 企业级分布式消息系统-Pulsar快速上手
Pulsar快速上手 前言 如果你还不了解Pulsar消息系统,可以先看上一篇文章 企业级分布式消息系统-Pulsar入门基础 Pulsar客户端支持多个语言,包括Java,Go,Pytho和C++, ...