1. 程式人生 > >Python學習筆記4 高級特性_20170618

Python學習筆記4 高級特性_20170618

don 全部 one cat rate for 切片 表示 ict

# 切片(獲取list / tuple / 字符串 中指定的元素)

l = list(range(10))
l[0:3]
l[:3] # 0可以省略
l[:] # 全部
l[3:] # 最後的可以省略
l[-2:-1] # 負數下標,見python筆記2中介紹
l[-10:] # 取最後10個數
l[::2] # 所有數,每個兩個取出

# 叠代

  • 通過 for ... in ...
  • 可叠代對象:list、tuple、字符串已經在pythonb筆記2中提到了。
  • 判斷是否可叠代
from collections import Iterable
isinstance(abc, Iterable)
  • 將 list 轉化成可以使用下標操作
for i, value in enumerate([A,B,C]) :
    print(i, value)
  • 同時引用兩個變量
for x,y in [(1,2), (3,4)] :
    print(x, y)

# 列表生成式(一句話生成需要的 list)

  • range
list(range(2,10))
  • 通用方法
[x*x for x in range(1,10)]
[x*x for x in range(1,10) if x%2 == 0]
[m+n for m in ABCD for n in 12345]
  • dict 情況
d = {
x:A, y:B} >>>[k+=+c for k,v in d.items()] [x=A, y=B]

# 生成器(得到的是“函數”規則,而非結果)

  • 列表生產式相關(將中括號改成小括號)
g = (x*x for x in range(10))
>>>next(g) # 獲得生成器的結果
  • 函數相關(在需要停的位置添加yield,比如改 print 為 yield)
# 函數
def dplist(l) : 
    for sub in l :
        print(sub)
    return done
# 生成器 def dplist(l) : for sub in l : yield(sub) return done

  添加了 yield 的地方更像是一個函數的運行斷點,每次運行都是承接上次的運行結果。不會循環,到末了就會報終止錯誤,該錯誤可以catch

  • 捕獲錯誤
>>>def dplist() : 
    for sub in range(10) :
        yield(sub)
    return done


>>>g = dplist()
>>>while True: try: x=next(g) print(g = , x) except StopIteration as e: print(Genearator return vaue : , e.value) break

# 叠代器

可以用於for循環的:list、tuple、dict、set、str、生成器(generator)等

  • 以上可以直接作用於 for 的,稱為“可叠代對象”(Iterable)

  判斷方法

from collections import Iterable
>>>isinstance([], Iterable)
  • “叠代器對象”(Iterator)
from collections import Iterator
>>>isinstance([], Iterator)

生成器才是“叠代對象”,可以使用next

list、tuple、dict、set、str、生成器(generator)是“可叠代”對象,不能使用next

  • Iterable轉化為Iterator,使用 iter()
isinstance(iter([]), Iterator)
  • 叠代器什麽用:

  叠代器因為是一種規則,所以理論上可以表示所有的整數。但是諸如 list 就不可以。

Python學習筆記4 高級特性_20170618