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 第一类对象 函数名 闭包 迭代器
一 .函数名的运用 ①函数名是⼀个变量, 但它是⼀个特殊的变量, 与括号配合可以执⾏函数的变量 ②函数名是一个内存地址 ③ 函数名可以赋值给其他变量 ④函数名可以当做容器类 ...
随机推荐
- 关于页面scroolTop的获取
scroolTop 发现问题 获取页面滚动高度的时候: 当html页面设置了DTD<!DOCTYPE html> document.body.scroolTop // 值总是为0: doc ...
- fiddle知识点六、如何使用fiddle进行模拟弱网
为什么要模拟弱网 随着互联网的快速发展,越来越多的应用核心功能需要网络进行实现.同一应用在2G.3G.4G和WiFi的不停网络下,响应各有不同.但是因为现在的网络普遍为4G网络,为了保证应用在不同的网 ...
- LINUX下查找大文件及大的文件夹
原帖地址:https://www.cnblogs.com/iyoume2008/p/6105590.html 今天正好碰到这样的问题,在博客园中看到有以上地址的一篇文章,照着上面的操作解决了问题,但是 ...
- vmware虚拟机三种网卡
vmware虚拟机三种网卡 vmware为我们提供了三种网络工作模式,它们分别是:Bridged(桥接模式).NAT(网络地址转换模式).Host-Only(仅主机模式). 打开vmware虚拟机 ...
- CSRF_TOKEN
目的是防御CSRF攻击. Token就是令牌,最大的特点就是随机性,不可预测. CSRF 攻击之所以能够成功,是因为黑客可以完全伪造用户的请求,该请求中所有的用户验证信息都是存在于 cookie 中, ...
- 【TensorFlow 2】矩阵基础
placeholder placeholder为tf中的占位符,用来保存数据.语法为: tf.placeholder(dtype, shape=None, name=None) dtype:数据类型 ...
- 2019牛客暑期多校训练营(第三场)H题目
题意:给你一个N×N的矩阵,求最大的子矩阵 满足子矩阵中最大值和最小值之差小于等于m. 思路:这题是求满足条件的最大子矩阵,毫无疑问要遍历所有矩阵,并判断矩阵是某满足这个条件,那么我们大致只要解决两个 ...
- CSS和html如何结合起来——选择符及优先级
1.选择符 兼容性 统配选择符 * 元素选择符 body 类选择符 .class id选择符 #id 包含原则符 p strong (所有 ...
- Ubuntu 16.04 LTS设置屏幕分辨率并永久保存所设置的分辨率
一.问题: 1.新装完Ubuntu 16.04 LTS后,进入系统打开命令行窗口,界面的分辨率显示是最小的: 2.进入System settings-->Displays 设置屏幕分辨率 显示& ...
- BrowserSync,自动刷新,解放F5,去掉更新提示
BrowserSync虽然这个技术不算新,但是依然有用.略微介绍下 没有安装node,先安装node,这里不再做介绍 安装 npm install -g browser-sync 全局安装,方便在任 ...