python学习笔记高级特性

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了python学习笔记高级特性相关的知识,希望对你有一定的参考价值。

一、切片

 

  list、tuple常常截取某一段元素,截取某一段元素的操作很常用 ,所以python提供了切片功能。

L=[a,b,c,d,e,f]
#取索引0,到索引3的元素,不包括索引3
print(L[0:3])
#开始索引为0可以省略
print(L[:3])
#下标1到3
print(L[1:3])
#取最后一个元素
print(L[-1])
#取倒数后两个元素
print(L[-2:])
#取前四个数,每两个取一个
print(L[:4:2])
#所有数,每两个取一个
print(L[::2])

 

二、迭代

 除了list、tuple可以迭代外,python中的dict类型变量也可以迭代。

dictor = {name:Jul,age:17,femail:1}
#迭代key
for key in dictor:
    print(key)    
#迭代value
for value in dictor.values():
    print(value)
#迭代key,value
for k,v in dictor.items():
    print(k,v)

 可以将list变为索引元素对的形式

for x,y in [(1,2),(3,4),(5,6)]:
    print(x,y)
#变为索引元素对
for i,value in enumerate([A,B,C]):
    print(i,value)

 

同时可以判断一个对象是否可以迭代

for x,y in [(1,2),(3,4),(5,6)]:
    print(x,y)
#变为索引元素对
for i,value in enumerate([A,B,C]):
    print(i,value)

 

 、列表生成式

list函数可以将一组对象组合为列表,[]操作也可以。[]操作的方式称作列表生成式

print([x for x in range(1,11)])
print(list(range(1,11)))

在列表生成式中可以加入一些运算规则,使生成的列表具备运算规则。

#变为索引元素对
for i,value in enumerate([A,B,C]):
    print(i,value)
#平方
print([x*x for x in range(1,11)])
#偶数平方
print([x*x for x in range(1,11) if x%2 ])
#k:v形式的列表
strdic={a:a1,b:b1,c:c1}
print([k+:+v for k,v in strdic.items()])
#将列表中字符串换为小写
L = [Hello, World, 18, Apple, None]
print([s.lower() for s in L if(isinstance(s,str)) ])

、生成器

python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

通过对返回值g调用next(g)可以依次取出生成的数据。

g = (x*2 for x in range(1,11))
print(g)
print(next(g))

可以一直调用next(g),直到产生StopIteration异常。

当然也可以通过函数构造生成器,将函数return的关键字换为yield即可。

#菲波那切数列
def fib(max):
    a,b,n = 0,1,0
    while n < max:
        yield b
        a,b=b,a+b
        n = n+ 1
    return "exit"

通过下面方式next取出数列中的元素,第三次调用会抛出StopIteration异常。

g=fib(2)
print(g)
print(next(g))
print(next(g))
#print(next(g))

上面代码中g为迭代器,通过对g不断调用next取出数列中元素。

可以通过检测异常的方式完成遍历,避免程序崩溃。

g2 = fib(6)

while True:
    try:
        value = next(g2)
        print("value: ", value)
    except StopIteration as e:
        print("Generator return value is: ", e)
        break

可以用生成器实现杨辉三角,生成器函数为triangles()。

技术分享

生成器函数triangles()实现如下:

def triangles():
    yield [1]
    yield [1,1]
    lists = [1,1]
    while True:
        i = 1
        n = len(lists)
        newlists = [1]
        while i < n:
            newlists.append(lists[i-1] + lists[i])
            i = i+1
        newlists.append(1)
        lists = newlists
        yield newlists    

 

、迭代器

python提供生成器的功能,生成器根据函数或运算规则产生一系列数据,

通过对返回值g调用next(g)可以依次取出生成的数据。g就是迭代器。

有的对象可以迭代但是不是迭代器,只有可以被next调用的对象才是迭代器。

同样可以通过isinstance函数判断迭代器。

from collections import Iterable
from collections import Iterator

b1 = isinstance([], Iterable)
b2 = isinstance([], Iterator)
print([] is Iteralbe, b1)
print([] is Iterator, b2)

b1 = isinstance({},Iterable)
b2 = isinstance({},Iterator)

print([] is Iteralbe, b1)
print([] is Iterator, b2)

b1 = isinstance((x*x for x in range(10)), Iterable)
b2 = isinstance((x*x for x in range(10)), Iterator)
print(x*x for x in range(10) isIterable, b1)
print(x*x for x in range(10) isIterator, b2)

#可以被next()函数调用并不断返回下一个值的对象称为迭代器:Iterator

b1 = isinstance(triangles(),Iterable)
b2 = isinstance(triangles(),Iterator)
print(triangles(), b1)
print(triangles(), b2)

 

特性就总结到此,下次会总结记录python函数的一些特性。

我的公众号,谢谢关注:

技术分享

 


以上是关于python学习笔记高级特性的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记高级特性

Python学习笔记4 高级特性_20170618

Python3 高级特性

python2.7高级编程 笔记二(Python中的描述符)

Python学习笔记__3.1章 切片

学习笔记:python3,代码片段(2017)