python的高階特性有切片、迭代、列表生成式、生成器、迭代器等,下面來介紹這幾種高階特性:
1、切片:
切片特別簡單,用中括號表示範圍,包前不包後。就是中括號裡邊的範圍前面的數值被包括在內,後面的數值不被包括在內。
l = ['a','b','c','d']
l[0:3] 索引從0開始取到3,不包括3.索引從0開始,0可以省略 l[:3]
l[1:3] 索引從1開始取到3,不包括3.
l[-2:] 倒數第二個元素到最後。
l[:] 整個list
tuple、字串也可以做切片。
2、迭代:
迭代通過for ... in 完成。
給定乙個list或者tuple,用for迴圈遍歷,稱為迭代。
dict迭代:for key in d / for value in d.values / for k,v in d.items()
判斷乙個物件是否可迭代:
from
collections
import
iterable
isinstance(
'aaa'
, iterable)
如何對list實現下標迴圈?
python內建的enumerate函式可以把乙個list變成索引-元素對。
for
i, value
in
enumerate([
'a',
'b',
'c']):
3、列表生成式:
列表生成式(
list comprehensions
):建立列表。
python內建的非常簡單卻強大的可以用來建立list的生成式。
生成list[1,2,3,4,5,6,7,8,9,10] -> list[range(1,11)]
生成list[1*1,2*2,3*3,...,10*10] -> [x*x for x in range(1,11)]
寫列表生成式時,把要生成的元素
x * x
放到前面,後面跟
for迴圈,就可以把list建立出來
使用:列出當前目錄下的所有檔案和目錄名
import
os[d
for
din
os.listdir(
'.')]
4、生成器:
通過列表生成式建立列表的方法受到記憶體限制,列表容量有限。且占用儲存空間大,浪費空間。
生成器(generator):一邊迴圈,一邊計算的機制。
建立generator方法:
(1)、把生成式[ ]轉換為( )
l = [x * x
for
xin
range(
10)]
g = (x * x
for
xin
range(
10))
獲取generator元素 next(g)
generator儲存的是演算法,每次呼叫next(g),就計算出g的下乙個元素的值,直到計算到最後乙個元素,沒有更多的元素時,丟擲stopiteration的錯誤。
next(g)使用麻煩,可以用for迴圈迭代。
for n in g:
(2)、把函式中print(x)轉換為 yield(x)
yield是中斷,函式中有yield就不再是普通函式,而是generator。
用for
迴圈呼叫generator時,發現拿不到generator的
return
語句的返回值。如果想要拿到返回值,必須捕獲
stopiteration
錯誤,返回值包含在
stopiteration
的value
中5、迭代器:
可以直接作用於for迴圈的資料型別:
1、list、tuple、dict、set、str
2、generator,包括生成器和帶yield的generator function
可以直接作用於for迴圈的物件統稱為可迭代物件:iterable.
判斷乙個物件是否為可迭代物件:isinstance()
from
collections
import
iterable
isinstance(, iterable)
isinstance({}, iterable)
isinstance(
'aaa'
, iterable)
isinstance((x
for
xin
range(
10)), iterable)
迭代器(iterator):可以被next()函式呼叫,並不斷返回下乙個值的物件。
生成器都是
iterator
物件,但
list
、
dict
、
str
雖然是
iterable
,卻不是
iterator
。
原因:迭代器物件表示的是乙個資料流,迭代器函式可以被next()呼叫並不斷返回下乙個資料,直到沒有資料時丟擲
stopiteration
錯誤。可以把這個資料流看做是乙個有序序列,但我們卻不能提前知道序列的長度,只能不斷通過
next()
函式實現按需計算下乙個資料,所以
iterator
的計算是惰性的,只有在需要返回下乙個資料時它才會計算。
凡是可作用於
for迴圈的物件都是
iterable
型別;凡是可作用於
next()
函式的物件都是
iterator
型別,它們表示乙個惰性計算的序列;
集合資料型別如
list
、dict
、str
等是iterable
但不是iterator
,不過可以通過
iter()
函式獲得乙個
iterator
物件。python的
for迴圈本質上就是通過不斷呼叫
next()
函式實現的。
怎樣學習python語言 如何學習python語言
python語言很神秘嗎 python作為一款類自然語言的程式語言,很方便的就可以上手,而且可以說是老少皆宜。用python程式設計非常簡單,只要有一台電腦 無論windows或者蘋果 就可以完成python程式設計。完成python程式設計首先需要在電腦上安裝python環境,安裝完成後就可以開始...
python學習筆記(三)
python的序列 列表,元組,字串都是列表,列表的主要特點是索引和切片操作 序列的基本操作 1.len 求序列的長度 2.連線兩個序列 3.重複序列元素 4.in判斷序列是否在元組中 5.max 返回最大值 6.min 返回最小值 7.cmp tup1,tup2 比較兩個序列的值 元組 元組和字串...
python學習筆記三
一 輸出 print的幾種用法 print hello world hello world中間有空格 print hello wolrd helloworld 中間沒有空格 print hello wolrd helloworld 中間沒有空格 print hello world hello wor...