獲取對象信息
- type(),對于函數(shù)信息可以使用types里的常量级遭。
- isinstance()
- dir() 列出屬性和方法
- 使用getattr(),setattr(),hasattr()
生成器在聚焦函數(shù)的使用
當(dāng)生成器表達式作為一個單獨參數(shù)傳遞給函數(shù)時候的巧妙語法(你并不需要多加一個括號)。比如渺尘,下面這些語句是等效的:
s = sum((x * x for x in nums)) #
顯示的傳遞一個生成器表達式對象
s = sum(x * x for x in nums) #
更加優(yōu)雅的實現(xiàn)方式挫鸽,省略了括號
比列表更加高效不需要創(chuàng)建一個額外的列表,列表如果過大會浪費內(nèi)存鸥跟。
區(qū)分
凡是可作用于for循環(huán)的對象都是Iterable類型丢郊;
凡是可作用于next()函數(shù)的對象都是Iterator類型,它們表示一個惰性計算的序列医咨;
集合數(shù)據(jù)類型如list枫匾、dict、str等是Iterable但不是Iterator拟淮,不過可以通過iter()函數(shù)獲得一個Iterator對象干茉。
for本質(zhì)
Python的for循環(huán)本質(zhì)上就是通過不斷調(diào)用next()函數(shù)實現(xiàn)的,例如:
for x in [1, 2, 3, 4, 5]:
pass
實際上完全等價于:
# 首先獲得Iterator對象:
it = iter([1, 2, 3, 4, 5])
# 循環(huán):
while True:
try:
# 獲得下一個值:
x = next(it)
except StopIteration:
# 遇到StopIteration就退出循環(huán)
break