Python高级特性

Python高级特性

Python是很高级的语言。所以,很多操作都是可以简化的。因此,使用Python的高级特性可以省很多事。

切片

原则,用冒号,[起点:终点:步幅]

没有起点表示从第一个开始切,没有终点表示切到最后一个,没有步幅表示切一个。

起点终点是1,2,3,表示正数第一个正数第二个。

起点终点是-1,-2,-3,表示倒数第一个倒数第二个。

>>> vocabulary
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> v=vocabulary[:]
>>> v
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> v1=vocabulary[::] #步长为1从头取到尾
>>> v1
('a', 'b', 'c', 'd', 'e', 'f', 'g')
>>> v[1:3] #从第1个取到第3个前
('b', 'c')
>>> v[-3:-1] #从倒数第三个取到倒数第一个前
('e', 'f')
>>> v[-3:] #从倒数第三个取到最后一个
('e', 'f', 'g')
>>> v3=v[::2]#每两个取一个
>>> v3
('a', 'c', 'e', 'g')

迭代

Python中for不是通过下标来完成。因此,Python中for循环的抽象程度更高。

只可以通过collection.abc模块判断之后是Iterable的对象都可以进行迭代。

用法:

from collections.abc import Iterable
print(isinstance('abc', Iterable))
print(isinstance([1, 2, 3], Iterable))

输出:

True
True

dict可以通过key迭代,也可以通过value迭代

可以通过enumerate使list获得下标,这种情况可以获得一个变量值。

列表生成式,可以用来生成list

for 前面的部分就是一个表达式。for后面可以加任何筛选条件

>>> [x * x for x in range(1,10) if x % 2 == 0]
[4, 16, 36, 64]

可以通过range 和 if的筛选生成各种各样的list

还可以进行循环嵌套

>>> [A+B for A in 'ABC' for B in 'XYZ']
['AX', 'AY', 'AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']

此时的第二重循环作为第一重循环的函数体存在

生成器

有点类似于递推,不断地算出数列的下一个。

情况1

利用列表生成式的格式创造生成式

>>> g=(A+B for A in 'ABC' for B in 'XYZ')
>>> next(g)
'AX'
>>> next(g)
'AY'

只有通过调用next()函数才会进行下一步的推算

情况2

通过yield来进行生成,函数在执行到yield处时中断并返回。当进行下一次执行时,从中断处继续向下执行。

def yanghui(max):
    L = [1, ]
    for i in range(1, max + 1):
        if i == 1:
            L = [1, ]
        if i == 2:
            L = [1, 1]
        if i > 2:
            t = 1
            for j in range(1, i - 1):
                L[j], t = t + L[j], L[j]
            L.append(1)
        yield L, i

y = yanghui(10)
for n in y:
    print(n)

运行结果:

([1], 1)
([1, 1], 2)
([1, 2, 1], 3)
([1, 3, 3, 1], 4)
([1, 4, 6, 4, 1], 5)
([1, 5, 10, 10, 5, 1], 6)
([1, 6, 15, 20, 15, 6, 1], 7)
([1, 7, 21, 35, 35, 21, 7, 1], 8)
([1, 8, 28, 56, 70, 56, 28, 8, 1], 9)
([1, 9, 36, 84, 126, 126, 84, 36, 9, 1], 10)

迭代器

迭代器其实是一个序列,不过,不访问不计算下一个。,list、dict、str是可以遍历的,但是他们无法迭代,是非更新的。适用于next()函数的变量才是可迭代的。

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值