Python3 函数进阶2
迭代器
迭代器是访问容器类数据类型元素的一种方式
迭代器是一个可以记住遍历的位置的对象
迭代器对象从容器类数据类型的第一个元素开始访问, 直到所有元素被访问完后结束
迭代器只能往前不会后退
可迭代对象
- 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的特性:
- 暂停函数
- 通过
__next__取后面的值
递归
递归是一种特殊的函数嵌套, 既在函数内部直接调用函数本身
递归函数的特性:
- 函数内部调用函数本身
- 递归必须要有规律
- 必须要有退出条件
count = 0
def func():
global count
count +=1
print(count)
if count == 5:
return
a()
'''
1
2
3
4
5
'''
Python3 函数进阶2的更多相关文章
- 5 Python3 函数进阶&迭代器与生成器
1.函数进阶 1.1.名称空间 又名name space, 顾名思义就是存放名字的地方,存什么名字呢?举例说明,若变量x=1,1存放于内存中,那名字x存放在哪里呢?名称空间正是存放名字x与1绑定关系的 ...
- Python3 函数进阶3
目录 匿名函数 定义匿名函数 匿名函数的使用 内置函数 匿名函数 定义匿名函数 我们之前定义的函数都是有名函数, 我们可以通过函数名来调用 匿名函数顾名思义就是一种没有绑定函数名的函数, 使用一次既被 ...
- Python3 函数进阶1
目录 闭包函数 什么是闭包函数 闭包函数的作用 装饰器 什么是装饰器 无参装饰器 有参装饰器 闭包函数 什么是闭包函数 闭包函数本质上就是函数嵌套和高阶函数 闭包函数的满足条件: 必须嵌套函数 内嵌函 ...
- python3函数进阶
1.命名空间和作用域 命名空间 加载 内置命名空间 python解释器自带的变量和函数 开启python解释器自动加载内置命名空 ...
- 洗礼灵魂,修炼python(25)--自定义函数(6)—从匿名函数进阶话题讲解中解析“函数式编程”
匿名函数进阶 前一章已经说了匿名函数,匿名函数还可以和其他内置函数结合使用 1.map map():映射器,映射 list(map(lambda x:x*2,range(10))) #把range产生 ...
- 10.Python初窥门径(函数进阶)
Python(函数进阶) 一.函数的传参(接上期) 形参角度(一共四种,后两种) 动态参数(万能参数)* # 定义一个函数时,*所有的位置参数聚合到一个元组中 def func(*args): # * ...
- 全面系统Python3入门+进阶课程 ✌✌
全面系统Python3入门+进阶课程 (一个人学习或许会很枯燥,但是寻找更多志同道合的朋友一起,学习将会变得更加有意义✌✌) 无论是大数据.人工智能还是机器学习,Python都是最热门的首选语言 ,这 ...
- 深入理解javascript函数进阶系列第一篇——高阶函数
前面的话 前面的函数系列中介绍了函数的基础用法.从本文开始,将介绍javascript函数进阶系列,本文将详细介绍高阶函数 定义 高阶函数(higher-order function)指操作函数的函数 ...
- python3函数
一.python3函数 函数是组织好的,可重复使用的,用来实现单一,或相关联功能的代码段. 函数能提高应用的模块性,和代码的重复利用率.可以自己创建函数,这被叫做用户自定义函数. 1.定义函数规则 函 ...
随机推荐
- Spring简单的示例
参考资料:https://how2j.cn/k/spring/spring-ioc-di/87.html.https://www.w3cschool.cn/wkspring/dgte1ica.html ...
- django学习与实践
Django简介 Django是一个由Python写成的开放源代码的Web应用框架,它最初是被用来开发管理劳伦斯出版集团旗下的一些以新闻内容为主的网站,即CMS(内容管理系统)软件. 并于2005 ...
- nginx+uWSGI+django+virtualenv+superviso发布web服务器
1.环境依赖 yum groupinstall "Development tools" -y yum install zlib-devel bzip2-devel pcre-dev ...
- java编程思想第四版第十八章总结
一.概述 如何学习java I/O 学习I/O类库 学习I/O发展史,为什么要学习发展史呢? 因为,如果缺乏发展史,我们就会对什么时候使用哪个类,以及什么时候不该使用它们而感到迷惑. 了解nio 二. ...
- Linux 搭建 WIKI
转自:http://blog.csdn.net/chy800/article/details/6906090 由于公司需要一个知识共享的系统,选择wiki来实现.经过准备决定使用Linux+xampp ...
- 领扣(LeetCode)转置矩阵 个人题解
给定一个矩阵 A, 返回 A 的转置矩阵. 矩阵的转置是指将矩阵的主对角线翻转,交换矩阵的行索引与列索引. 示例 1: 输入:[[1,2,3],[4,5,6],[7,8,9]] 输出:[[1,4,7] ...
- C语言|博客作业05
这个作业属于哪个课程 C语言程序设计II 这个作业的要求在哪里 https://edu.cnblogs.com/campus/zswxy/CST2019-1/homework/9825 我在这个课程的 ...
- libdispatch.dylib中dispatch_group的实现
semaphore和group都是libdispatch提供的基于信号量的同步机制,dispatch_group继承自dispatch_semaphore,使用libdispatch层的信号量算法.d ...
- 详解在Linux系统中安装JDK
本文以在CentOS 7.6中安装JDK8为例进行安装,其他系统和版本都是大同小异的. 下载 进入Oracle官方网站的下载页面. 首先,接受许可协议,如下图: 然后,根据Linux系统的位数选择要下 ...
- [ch03-00] 损失函数
系列博客,原文在笔者所维护的github上:https://aka.ms/beginnerAI, 点击star加星不要吝啬,星越多笔者越努力. 第3章 损失函数 3.0 损失函数概论 3.0.1 概念 ...