python学习(第五站:高级特性)

高级特性

利用python的高级特性,实现用少量代码实现功能,做到代码少,开发效率高。

切片

普通索引对经常取定范围索引操作,需采用循环方式,显得十分的繁琐,slice就是为了简化这繁琐操作衍生出来的产品。切片(slice)是对序列型对象(如list, string, tuple)的一种高级索引方法。普通索引只取出序列中一个下标对应的元素,而切片取出序列中一个范围对应的元素,这里的范围不是狭义上的连续片段。例子:
列表:

Lt = [1,'hello','早上好']

只想获取后面两个参数:
普通索引

>>> Lt = [1,'hello','早上好']
>>> Lt
[1, 'hello', '早上好']
>>> LtNew = []
>>> for i in range(3):
...      if i > 0:
...          LtNew.append(Lt[i])
...
>>>
>>> LtNew
['hello', '早上好']

切片

>>> Lt[1:3]
['hello', '早上好']

迭代

迭代就是遍历,也就是for循环。怎么判断是否可以迭代呢?

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True

列表生成式

列表生成式即List Comprehensions,字译–>用来创建list的生成式
如:[1,2,3,4,5,6],可以用list(range(1,7))

>>> L = range(1,11)
>>> list(L)
[1, 2, 3, 4, 5, 6, 7, 8, 9, 10]

利用列表生成式和迭代的方式可以快速的拿到想要的列表,如Lt = [1,‘hello’,‘早上好’],想要获取Lt中字符串:

>>> Lt = [1, 'hello', '早上好']
>>> LtString = [s.lower() for s in Lt if isinstance(s, str)]
>>> LtString
['hello', '早上好']

临时跳跃一下知识点: s.lower 最后把一个list中所有的字符串变成小写
for s in L1 for循环
if isinstance(s, str) 判断条件,isinstance函数用于判断,第一个参数是需要被判断的变量,第二个是判断条件,这是判断s变量是不是字符串

生成器

一边循环一边计算的机制称之为生成器,简单的创建方式是将列表生成式的[]改为()就可以了

>>> Lg = (1, 'hello', '早上好')
>>> for n in Lg:
...      print('n:', n)
...
n: 1
n: hello
n: 早上好

上面没有运算,无法体现生成器的优势,下面就拿廖雪峰老师的练习题杨辉三角来体验一下吧!

>>> def triangles():
...     L = [1]
...     while True:
...             yield L
...             L = [sum(i) for i in zip([0] + L, L + [0])]
...
>>> n = 0
>>> results = []
>>> for t in triangles():
...     results.append(t)
...     n = n + 1
...     if n == 10:
...         break
...
>>> for t in results:
...     print(t)
...
[1]
[1, 1]
[1, 2, 1]
[1, 3, 3, 1]
[1, 4, 6, 4, 1]
[1, 5, 10, 10, 5, 1]
[1, 6, 15, 20, 15, 6, 1]
[1, 7, 21, 35, 35, 21, 7, 1]
[1, 8, 28, 56, 70, 56, 28, 8, 1]
[1, 9, 36, 84, 126, 126, 84, 36, 9, 1]

如果一个函数定义中包含yield关键字,那么这个函数就不再是一个普通函数,而是一个generator(生成器)。
需要特别注重理解的就是generator和函数的执行流程不一样。函数是顺序执行,遇到return语句或者最后一行函数语句就返回,再次执行就是重新开始。而变成generator的函数,在每次调用next()的时候执行,遇到yield语句返回,再次执行时从上次返回的yield语句处继续执行。
补充知识:
sum函数式对序列进行求和计算;zip() 函数用于将可迭代的对象作为参数,将对象中对应的元素打包成一个个元组,然后返回由这些元组组成的列表。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值