迭代器

  • 迭代器是访问容器类数据类型元素的一种方式

  • 迭代器是一个可以记住遍历的位置的对象

  • 迭代器对象从容器类数据类型的第一个元素开始访问, 直到所有元素被访问完后结束

  • 迭代器只能往前不会后退

可迭代对象

  • Python内置的str/list/tuple/dict/set/file/都是可迭代对象
  • 拥有__iter__内置方法的都是可迭代对象

迭代器对象

  • 可迭代对象使用__iter__方法可以得到迭代器对象

  • 拥有__iter__和__next__内置方法的就是迭代器对象

lis = [1, 2, 3]

# 可迭代对象使用__iter__方法可以得到迭代器对象
iter_lis = lis.__iter__() print(iter_lis.__next__()) # 1
print(iter_lis.__next__()) # 2
print(iter_lis.__next__()) # 3
print(iter_lis.__next__()) # StopIteration

总结和补充

  • 执行可迭代对象的__iter__方法, 拿到的返回值就是迭代器对象

  • 执行迭代器对象__next__方法, 拿到迭代器对象中的一个值

  • 执行迭代器对象__iter__方法, 拿到的是迭代器本身

  • 文件本身就是迭代器对象

    三元表达式

三元表达式就是对if...else...语句的简化写法(不建议使用)

x = 10
y = 20 # 普通写法
if x > y:
print(x)
else:
print(y) # 三元表达式
print(x) if x > y else print(y)

列表推导式

列表推导式可以用来生成新的列表

lis = [i for i in range(10)]
print(lis) # [0, 1, 2, 3, 4, 5, 6, 7, 8, 9] # 我们还可以对i进行数学运算
lis = [i+1 for i in [1, 2, 3]]
print(lis) # [2, 3, 4]

字典生成式

字典生成式可以用来生成新的字典

dic = {i: i**2 for i in range(3)}
print(dic) # {0: 0, 1: 1, 2: 4}

zip()函数

zip() 函数用于将可迭代的对象作为参数, 将对象中对应的元素压缩成一个个元祖, 然后返回由这些元祖组成的对象.

  • 我们可以使用list()转换来输出列表
  • 如果各个迭代器的元素个数不一致, 则返回列表长度以最短的为准
  • 利用*操作符, 可以将元祖解压为列表
a = [1, 2, 3]
b = [4, 5, 6]
c = [4, 5, 6, 7, 8] zipped = zip(a, b)
print(zipped) # <zip object at 0x000000000A0012C8> 返回多个元祖组成的对象
print(list(zipped)) # [(1, 4), (2, 5), (3, 6)] print(list(zip(a, c))) # [(1, 4), (2, 5), (3, 6)] 以短的为准 a1, b1 = zip(*zip(a,b)) # zip(*) 可理解为解压
print(list(a1)) # [1, 2, 3]
print(list(b1)) # [4, 5, 6]

生成器

  • 生成器本质上就是一个自定义的迭代器
  • 含有yield关键字的函数叫做生成器
def gene():
print(1)
yield 1
print(2)
yield 2 g = gene()
print(g) # <generator object gene at 0x0000000009F81258> print(g.__next__()) # 1 1
print(g.__next__()) # 2 2
  • yield的特性:

    1. 暂停函数
    2. 通过__next__取后面的值

递归

  • 递归是一种特殊的函数嵌套, 既在函数内部直接调用函数本身

  • 递归函数的特性:

    1. 函数内部调用函数本身
    2. 递归必须要有规律
    3. 必须要有退出条件
count = 0

def func():
global count
count +=1
print(count)
if count == 5:
return
a() '''
1
2
3
4
5
'''

Python3 函数进阶2的更多相关文章

  1. 5 Python3 函数进阶&迭代器与生成器

    1.函数进阶 1.1.名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的 ...

  2. Python3 函数进阶3

    目录 匿名函数 定义匿名函数 匿名函数的使用 内置函数 匿名函数 定义匿名函数 我们之前定义的函数都是有名函数, 我们可以通过函数名来调用 匿名函数顾名思义就是一种没有绑定函数名的函数, 使用一次既被 ...

  3. Python3 函数进阶1

    目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...

  4. python3函数进阶

    1.命名空间和作用域 命名空间     加载         内置命名空间             python解释器自带的变量和函数             开启python解释器自动加载内置命名空 ...

  5. 洗礼灵魂,修炼python(25)--自定义函数(6)—从匿名函数进阶话题讲解中解析“函数式编程”

    匿名函数进阶 前一章已经说了匿名函数,匿名函数还可以和其他内置函数结合使用 1.map map():映射器,映射 list(map(lambda x:x*2,range(10))) #把range产生 ...

  6. 10.Python初窥门径(函数进阶)

    Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # * ...

  7. 全面系统Python3入门+进阶课程 ✌✌

    全面系统Python3入门+进阶课程 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 无论是大数据.人工智能还是机器学习,Python都是最热门的首选语言 ,这 ...

  8. 深入理解javascript函数进阶系列第一篇——高阶函数

    前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...

  9. python3函数

    一.python3函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.可以自己创建函数,这被叫做用户自定义函数. 1.定义函数规则 函 ...

随机推荐

  1. java编程思想第四版第八章总结

    1. 多态的含义 面向对象的三大基本特征: 封装,继承,多态. 多态是干什么的? 多态将做什么和怎么做分离开.从另一个角度将接口是实现类分离开. 多态的作用 消除类型之间耦合的关系 使用多态的好处? ...

  2. suseoj 1206 众数问题 (相邻数比较)

    1206: 众数问题 时间限制: 1 Sec  内存限制: 128 MB提交: 45  解决: 8[提交][状态][讨论版][命题人:liyuansong] 题目描述 给定含有n个元素的多重集合S,每 ...

  3. nyoj 311-完全背包 (动态规划, 完全背包)

    311-完全背包 内存限制:64MB 时间限制:4000ms Special Judge: No accepted:5 submit:7 题目描述: 直接说题意,完全背包定义有N种物品和一个容量为V的 ...

  4. linux磁盘分区、格式化、挂载

    新建分区的操作步骤,如下图: 1)RAID卡: 机器有没有RAID卡可以在开机时看有没有出现配置RAID什么的提示(亲测),系统运行时有没有,不知道! 服务器大多有这个新加硬盘后不修改raid,开即f ...

  5. Android ConstraintLayout

    对官方例子加上自己的容器即可调整ConstraintLayout实时运行中观察这种布局的变化

  6. JPA中使用@Query注解多表联查

    原生SQL: select `user`.id, `user`.`name`,dept.name deptName,sum(sd.score) SumScore from `user` LEFT JO ...

  7. 就该这样理解 OSI 七层参考模型、浅谈不同局域网之间的通信

    简介 说到OSI参考模型,理解网络与网络之间的关系,不说太深入难以理解的东西,只求能最大程度上理解与使用. 参考模型是国际标准化组织(ISO)制定的一个用于计算机或通信系统间互联的标准体系,一般称为O ...

  8. 并行模式之Master-Worker模式

    并行模式之Master-Worker模式 一).Master-Worker模式 作用: 将一个大任务分解成若干个小任务,分发给多个子线程执行. 注: 将大任务分解成小任务,小任务的实现逻辑要相同. 二 ...

  9. ubuntu server 1604 设置笔记本盒盖 不操作

    sudo vim /etc/systemd/logind.conf   //打开配置文件 找到 #HandleLidSwitch=suspend  改为 HandleLidSwitch=ignore  ...

  10. Docker从入门到实践(4-1)

    使用 Docker 镜像 在之前的介绍中,我们知道镜像是 Docker 的三大组件之一. Docker 运行容器前需要本地存在对应的镜像,如果本地不存在该镜像,Docker 会从镜像仓库下载该镜像. ...