Python相关基础
来源:互联网 发布:阿里云购买云服务器 编辑:程序博客网 时间:2024/06/10 18:53
官方文档:https://docs.python.org/3/
函数Functions:
zip函数
zip函数接受任意多个(包括0个和1个)序列作为参数,返回一个tuple列表。看示例:
1.示例1:
x = [1, 2, 3]y = [4, 5, 6]z = [7, 8, 9]xyz = zip(x, y, z)print xyz
运行的结果是:
[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
从这个结果可以看出zip函数的基本运作方式。
2.示例2:
x = [1, 2, 3]y = [4, 5, 6, 7]xy = zip(x, y)print xy
运行的结果是:
[(1, 4), (2, 5), (3, 6)]
从这个结果可以看出zip函数的长度处理方式。
3.示例3:
x = [1, 2, 3]x = zip(x)print x
运行的结果是:
[(1,), (2,), (3,)]
从这个结果可以看出zip函数在只有一个参数时运作的方式。
4.示例4:
x = zip()print x
运行的结果是:
[]
从这个结果可以看出zip函数在没有参数时运作的方式。
5.示例5:
x = [1, 2, 3]y = [4, 5, 6]z = [7, 8, 9]xyz = zip(x, y, z)u = zip(*xyz)print u
运行的结果是:
[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
一般认为这是一个unzip的过程,它的运行机制是这样的:
在运行zip(*xyz)之前,xyz的值是:[(1, 4, 7), (2, 5, 8), (3, 6, 9)]
那么,zip(*xyz) 等价于 zip((1, 4, 7), (2, 5, 8), (3, 6, 9))
所以,运行结果是:[(1, 2, 3), (4, 5, 6), (7, 8, 9)]
注:在函数调用中使用*list/tuple的方式表示将list/tuple分开,作为位置参数传递给对应函数(前提是对应函数支持不定个数的位置参数)
6.示例6:
x = [1, 2, 3]r = zip(* [x] * 3)print r
运行的结果是:
[(1, 1, 1), (2, 2, 2), (3, 3, 3)]
它的运行机制是这样的:
[x]生成一个列表的列表,它只有一个元素x
[x] * 3生成一个列表的列表,它有3个元素,[x, x, x]
zip(* [x] * 3)的意思就明确了,zip(x, x, x)
yield()函数:
注释:这个mygen生成器就是用来生成x的平方的东西。这个结果就存在上面显示的内存地址里。但是由于你还没说你到底要谁的平方,所以只能看到个地址不能看到答案。
这样就可以把mygen可以生成的所有平方数拿出来了。结果显示:
0
1
4
注:当你需要循环读取、而不是一下子全显示出来的时候,用生成器。
---------------------------------------------------------------------------------------------------------------
---"在python中,当你定义一个函数,使用了yield关键字时,这个函数就是一个生成器"
--- 一般def定义的函数,都会return一个返回值。而def定义的生成器,返回的则是一个对象,也就是上面提到的类似于“内存地址”的东西。
--- 如果需要生成器返回(下一个)值,需要调用.next()函数。其实当系统判断def是生成器时,就会自动支持.next()函数
Eg:
fib()函数因为含有yield,被系统默认为是一个生成器。
for语句调用了fib(15)。当max=15时,进入fib()生成器,执行到yield a, 返回a值以及整个生成器暂停的状态,将a值赋给n, 打印出来;因为是for语句循环,所以又回到fib(15)语句,由于是生成器,因此从上次截断的位置开始执行,b值赋给a, a+b值赋给b,又因为是while语句,则继续while循环,yield a值,循环暂停跳出返回a值及生成器状态,把a值赋给n, 打印n。如此往复,一直循环到15结束。
m被赋了fib(13)这个生成器,每一次执行m.next()函数就会打印下一个值。
注:
1. 每个生成器只能使用一次。比如上个例子中的m生成器,一旦打印完m的6个值,就没有办法再打印m的值了;
2. yield一般都在def生成器定义中搭配一些循环语句使用,比如for或者while,以防止运行到生成器末尾跳出生成器函数,就不能再yield了。有时为了保证生成器函数永远也不会执行到函数末尾,会用while True: 语句,这样就会保证只要使用next(),这个生成器就会生成一个值,是处理无穷序列的常见方法。
类Class:
- Python 基础相关
- Python相关基础
- Python基础练习——字符串相关
- python基础(字符串相关操作)
- Python里的例子:一个基础验证相关的教程
- 适配器、面向对象原则、python 基础语法相关技巧
- Python基础_即时标记及其相关的语法
- Python 基础 —— float("inf") 无穷的相关问题
- Linux下Python的一些基础相关问题(1)
- Python基础(四)-列表的相关操作
- python基础(五)--文件的相关操作
- Python基础:列表,元组,字典,集合相关基本操作
- 相关基础
- python相关
- python相关
- python相关
- Python 相关
- Python相关
- 洛谷 P1198 [JSOI2008]最大数
- 设计模式--创建型模式简介及总结
- Spring 使用注解的方式实现IOC和DI(控制反转和依赖注入)
- android studio多项目引用同一Module
- (实验)Java一个线程用synchronized嵌套锁多个对象时调用wait()只释放wait函数关联的所对象还是释放所有锁对象
- Python相关基础
- 计算某年某月某日是该年的第几天【算法入门】
- 栈的存储结构和应用
- layui
- MIPS汇编练习
- MSSQL附加数据库5120错误(拒绝访问)处理方法
- EditPlus实现自动提示和跳转,下载配置CTags,附上下载链接
- Android studio配置copyright插入版权信息的详细教程
- ml-拟合浅谈