python十大高级特性_Python高级特性

减少代码,提高效率

1.切片

取一个序列的部分元素

L [ start : end : step ]  含头不含尾

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 L = [ 1, 3, 6, 9, 45, 66]5

6 print ( L[:4] ) #等同于L[0:4]切片下标为 0 ~ 3

7 print ( L[-2:] ) #倒数切片 从倒数第2开始往后切 倒数第二、倒数第一

8 print ( L[:5:2] ) #前5个数,每2个取一个

9 print ( L[::5] ) #所有数,每5个取一个

c564f658779cdd696ccd24c465f06c51.png

L[ : : -1]     倒切

2.迭代

在Python中,迭代是通过 for...in 来完成的,而很多语言迭代 list 是通过下标完成的。

无论有无下标都可以迭代,如dict

f343254997a6941ce72fd948a5b21f78.png

dict不是按顺序排列存储,迭代出的结果顺序很可能不一样

dict默认迭代 key 如要要迭代 value:

86f10768098eb7969aaea054e6cd0320.png

同时迭代 key 和 value :

dbb4fa4eddcb857c625d5dcb3e3cb5bb.png

判断是否可以迭代

a79dd9c735a50be6074bb0a1a61581cb.png

3.迭代器

迭代是Python最强大的功能之一,是访问集合元素的一种方式。

凡是可作用于for循环的对象都是Iterable类型,即迭代对象

凡是可作用于next()函数的对象都是Iterator类型,即迭代器,表示一个惰性计算的序列(只有在需要返回下一个数据时它才会计算)

迭代器对象从集合的第一个元素开始访问,直到所有的元素被访问完结束。迭代器只能往前不会后退。

迭代器有两个基本的方法:iter() 和 next()。

集合数据类型如list、dict、str等是迭代对象,但不是迭代器,可通过 iter() 函数获得一个迭代器对象

字符串,列表或元组对象都可用于创建迭代器

迭代器对象可以使用常规for语句进行遍历:

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 list = [1, 2, 3, 4]5 it = iter(list) #创建迭代器对象

6

7 for x init:8 print(x, end=" ") #不换行输出

91f39bc88d4eae811d06c78c4c944a9e.png

也可以使用 next() 函数:

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 list = [1, 2, 3, 4]5 it = iter(list) #创建迭代器对象

6

7 whileTrue:8 print (next(it))

8853ff5f741869473d5d388e83853977.png

StopIteration

StopIteration 异常用于标识迭代的完成,防止出现无限循环的情况

4.列表生成式

简单却强大的可用来创建list的生成式

如:生成一个列表 [1x1,  2x2,  3x3,  ...,  10x10]

用循环做

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 L =[]5 for x in range(1,11):6 L.append(x*x)7 for i inL[:]:8 print (i, end = " ")

用列表生成式做

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 L = [ x*x for x in range(1,11)]5

6 for i inL[:]:7 print (i, end = " ")

d88c5b11eec56112ed63d02bfeab79e8.png

列表生成式内还可加 if 判断

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 L = [ x*x for x in range(1,11) if x%2 ==0 ]5 #筛选出仅偶数的平方

6 for i inL[:]:7 print (i, end = " ")

5b36f2854ad24e75b47f09760d3738f0.png

还可使用两层循坏,如生成一个全排列

1 #!/usr/bin/python3

2 #-*- coding:utf-8 -*-

3

4 L = [ m+n for m in 'ABC' for n in 'XYZ']5 for i inL[:]:6 print (i, end = " ")

299ca45cdc513b7766152f87df4b8e5e.png

5.生成器

通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,那后面绝大多数元素占用的空间都白白浪费了。

所以,如果列表元素可以按照某种算法推算出来,那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。在Python中,这种一边循环一边计算的机制,称为生成器:generator。

在 Python 中,使用了 yield 的函数被称为生成器(generator)。

跟普通函数不同的是,生成器是一个返回迭代器的函数,只能用于迭代操作,更简单点理解生成器就是一个迭代器。

在调用生成器运行的过程中,每次遇到 yield 时函数会暂停并保存当前所有的运行信息,返回 yield 的值, 并在下一次执行 next() 方法时从当前位置继续运行。

调用一个生成器函数,返回的是一个迭代器对象。

以下实例使用 yield 实现斐波那契数列:

1 #!/usr/bin/python3

2 importsys3

4 def fibonacci(n): #生成器函数 - 斐波那契

5 a, b, counter = 1, 1, 06 whileTrue:7 if (counter >n):8 return

9 yielda10 a, b = b, a +b11 counter += 1

12

13 f = fibonacci(10) #f 是一个迭代器,由生成器返回生成

14 whileTrue:15 try:16 print (next(f), end=" ")17 exceptStopIteration:18 sys.exit()

f91313eba8caa15be99ede787f298fdb.png

  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值