Python基础:高级特性

from collections.abc import Iterable
from collections.abc import Iterator
#==============切片===============
'''
切片:取list和tuple中[s:t)区间的元素,如果s=o或者t为最后可以省略不写
可以进行切片的对象:list,tuple,str
'''
L=list(range(10))
print(L)
print(L[0:3])#取[0,3)
print(L[:3])#取[0,3)
print(L[2:5])#取[2,5)
print(L[5:])#从5取到最后

print(L[-2:])#负号表示倒数
print(L[:10:2])#最后的2表示步长,步长为1的时候可以省略

#==============迭代===============
'''
迭代:使用for循环去对可以迭代对象进行迭代
可迭代对象:list,dict
'''
L=list(range(5)) #list的迭代
for x in L:
    print(x,end=" ")
print("")

d = {'a': 1, 'b': 2, 'c': 3} #字典的迭代
for key in d:
    print(key,end=" ") #默认情况是对key进行迭代
print("")

for value in d.values():#对value进行迭代
    print(value,end=" ")
print("")

for key,value in d.items():#对key:value对进行迭代
    print(key,":",value,end="\t")
print("")

#判断可迭代对象
print(isinstance('abc', Iterable))
print(isinstance([1,2,3,4], Iterable))
print(isinstance(d, Iterable))
print(isinstance(1234, Iterable))

#enumerate函数可以把一个list变成索引-元素对,这样就可以在for循环中同时迭代索引和元素本身
for i, value in enumerate(['A', 'B', 'C']):#相当于加索引号
    print(i, value)

#==============列表生成式===============
'''
是Python内置的非常简单却强大的可以用来创建list的生成式。
生成原则:
1、第一项生成列表的元素,并且是最内层且套的语句
2、从第二项其开始语句层层嵌套,第一个语句放在最里面。
'''
L=[x * x for x in range(1, 11)]  #相当于将循环体写在最前面,变成最终的list元素
print(L)
L=[x * x for x in range(1, 11) if x % 2 == 0]  #用if语句进行控制(不能有else):最前面的式子是最里面的表达式
print(L)
L= [m + n for m in 'ABC' for n in 'XYZ']#最前面的式子是最里面的表达式,前后的关系是嵌套的关系
print(L)

L=[x if x % 2 == 0 else -x for x in range(1, 11)]  #最前面可以是一个if else语句(必须有else)
print(L)

#=====================生成器====================
'''
定义:
通过列表生成式,我们可以直接创建一个列表。但是,受到内存限制,列表容量肯定是有限的。
而且,创建一个包含100万个元素的列表,不仅占用很大的存储空间,如果我们仅仅需要访问前面几个元素,
那后面绝大多数元素占用的空间都白白浪费了。所以,如果列表元素可以按照某种算法推算出来,
那我们是否可以在循环的过程中不断推算出后续的元素呢?这样就不必创建完整的list,从而节省大量的空间。
在Python中,这种一边循环一边计算的机制,称为生成器:generator。
构造生成器的方法:
1、只要把一个列表生成式的[]改成()
2、用函数来定义,通过关键词yield
'''
print('#=====================生成器====================\n')
L = [x * x for x in range(10)]
g = (x * x for x in range(10))
print(L)
print(g)
#可以通过next()函数获得generator的下一个返回值
print(next(g))#没有更多的元素时,抛出StopIteration的错误
#generator也是可迭代对象,所以可以使用for进行迭代
for x in g:
    print(x,end="\t")
print("")
#注意:生成器是不能后退的
#函数生成器生成斐波那契数列
def fib(max):
    n,a, b =0, 0, 1
    while n < max:
        yield b   #每次迭代都停止在这个地方,将b返回
        a, b = b, a + b
        n+=1
#执行过程与函数是一样的,只是每次到yield就停止,下次接着当前位置继续执行
f = fib(6)
for x in f:
    print(x,end="\t")
print("")

#=====================迭代器====================
print("#=====================迭代器====================")
'''
可迭代对象:
可以直接作用于for循环的对象统称为可迭代对象:Iterable
1、是集合数据类型,如list、tuple、dict、set、str等;
2、一类是generator,包括生成器和带yield的generator function。
可以使用isinstance()判断一个对象是否是Iterable对象:
迭代器:
可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator。
可以使用isinstance()判断一个对象是否是Iterator对象:
'''
print(isinstance({}, Iterable))
print(isinstance([], Iterable))
f = fib(6)
print(isinstance(f, Iterable))
print(isinstance(123, Iterable))
print("")
print(isinstance({}, Iterator))
print(isinstance([], Iterator))
print(isinstance(f, Iterator))
print(isinstance(123, Iterator))
#可以看出迭代器是可迭代对象,但可迭代对象不一定是迭代器
#可以使用iter()函数,将可迭代对象变成迭代器
print(isinstance(iter('abc'), Iterator))
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值