python中的高级特性

迭代

迭代可以对list,tuple和str等类型的数据进行操作,如何判断一个数据是否可以迭代:

>>> from collections import Iterable
>>> isinstance('abc', Iterable) # str是否可迭代
True
>>> isinstance([1,2,3], Iterable) # list是否可迭代
True
>>> isinstance(123, Iterable) # 整数是否可迭代
False
list中如何实现如Java一样的下标:使用Python中的内置enumerate函数:

a = [1,2,3]
b = ['a','b','c']
c = 'ABC'
for i , value in enumerate(a):
    print(i,value)
>>>0 1
>>>1 2
>>>2 3
列表生成式

带if的列表生成式,在生成list时候,进行筛选:

>>>[x*x for i in range(1,11) if i%2 == 0]
[4,16,36,64,100]
对字符串进行全排列:

>>>[m +n for m in 'ABC' for n in 'XYZ']
['AX','AY','AZ', 'BX', 'BY', 'BZ', 'CX', 'CY', 'CZ']
生成器

为了不占用很大的内存空间,在Python中,有种一边循环一边计算的机制,称为生成器:generator

创建generator,只需把列表生成器的[]改为()即可:

g = ( x*x for x in range(10))
next(g)
>>>0
next(g)
>>>1
...
使用for循环也可以将g全部输出:

for n in g:
    print(n)
>>>0
1
4
9
16
25
36
49
64
81
另一种定义生成器的方法就是:函数中的yield关键字,该函数为一个generator。则在运行过程中遇到yield就进行返回。

def test():
    print("step1:")
    yield 'a'
    print("step2:")
    yield 'b'
    print("step3:")
    yield 'c'
    print("step4:")
    yield 'd'
    return 'over'
    
for x in test():
    print(x)
>>>step1:
a
step2:
b
step3:
c
step4:
d
但是不能输出返回语句, 如果想要拿到返回值,必须捕获 StopIteration 错误,返回值包含在 StopIteration value ,需进行改写:

x = test()    
while 1:
    try:
        print(next(x))
    except StopIteration as e:
        print(e.value)
        break
>>>
step1:
a
step2:
b
step3:
c
step4:
d
over
【注】最后的break如果忘记的话会形成死循环!!!







评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值