Python 第十八天學習筆記
迭代器
提供迭代方法的容器稱為迭代器,通常接觸的迭代器有序列(列表,元組,字串)和字典
字典: {鍵:項}
links = {"爸爸":"father",\
"媽媽":"mother",\"妹妹":"sister"}
for each in links:
print("%s -> %s" % (each,links[each])) %s表示字串
結果:
爸爸 -> father
媽媽 -> mother
妹妹 -> sister
關於迭代,Python有兩個BIF,分別是:
iter()
next()
>>> string = "fishc"
>>> it = iter(string)
>>> while True:
try:
each = next(it)
except StopIteration:
break
print(each)
與for迴圈結果相同:
>>> for each in string:
print(each)
魔法方法:
__iter()__
__next()__
#斐波那契數列,一個數是前兩個數的和
class Fibs:
def __init__(self):
self.a = 0
self.b = 1
def __iter__(self):
return self
def __next__(self):
self.a, self.b=self.b, self.a + self.
return self.a
>>> fibs = Fibs():
>>> for each in fibs:
if each < 20:
print(each)
生成器
def fibs():
a = 0
b = 1
while True:
a,b = b,a+b
yield a
for each in fibs():
if each <20:
print(each)
列表推導式
求100 以內,能被2整除,但不能被3整除的所有整數:
>>> a = [i for i in range(100) if not(i % 2) and (i % 3)
>>> a
[2, 4, 8, 10, 14, 16, 20, 22, 26, 28, 32, 34, 38, 40, 44, 46, 50, 52, 56, 58, 62, 64, 68, 70, 74, 76, 80, 82, 86, 88, 92, 94, 98]
如果i是偶數,則 i%2 == 0 , 0 表示False,not(i % 2) 表示1,True
如果i不能被3整除,則i%3不等於0,表示True
True and True 表示True , 但是注意 False and False 還是等於 False
字典推導式
>>> b = {i:i%2==0 for i in range(10)}
>>> b
{0: True, 1: False, 2: True, 3: False, 4: True, 5: False, 6: True, 7: False, 8: True, 9: False}
集合推導式
>>> c = {i for i in [1,1,2,3,3,4,5,5,6,7,7]} (去除重複數)
>>> c
{1, 2, 3, 4, 5, 6, 7}
生成器推導式 用小括號括起來
>>> e = (i for i in range(10))
>>> e
<generator object <genexpr> at 0x0000005D9EDE87D8>
>>> next(e)
0
>>> next(e)
1
>>> sum (i for i in range(10) if i %2 == 0)
20
第十三章 模組
匯入模組:
import 模組名
from 模組名 import函式名
import 模組名 as 新名字
__name__ == "__main__":
test()
有了這個程式碼可以確保只有單獨執行某一程式碼時才會執行 test()函式
檢視檔案路徑
檢視說明
更常用print(),給人看
檢視變數說明
但是並不是所有這些名字對我們都有用,所以要過濾一些不需要的東西
用__all__屬性
不是所有的模組都有 __all__屬性,
如果一個模組設定了 __all__屬性,那麼使用 from timeit import * 這樣的形式匯入名稱空間,就只有__all__屬性這個列表裡邊的名字才會被匯入,其他的名字不受影響
如果沒有設定__all__屬性,那麼使用 from timeit import * 這樣的形式匯入名稱空間,就會把所有不以下劃線開頭的名字都匯入到當前的名稱空間
所以建議在編寫模組時,將對外提供的介面函式和類都設定到__all__屬性這個列表裡
課後題:
>>> a = range(5)
>>> it = iter(a)
>>> while True:
try:
each = next(it)
except StopIteration:
break
print(each)