在最開始,我記錄一個內容:TPU,TPU是谷歌生產的專用於tensor計算的處理器。下面進入正式部分
python中只有if,if else,if elif,if elif else這幾種組合,判斷的條件不是None,0,False就可以執行;如果藉助elif就可以實現多分支判斷:
#條件判斷 if else
age=66
if age<18:
print('young boy')
else:
print('adults')
#多分支判斷 if elif
age=66
if age<18:
print('young boy')
elif age>18 and age<60:
pringt('adults')
elif age>60:
print('others')
關於三元表示式,a if condition else b
,它只是一個表示式,如果條件不是None或者0,False,就返回a,否則返回b
三元表示式通常用於條件判斷的場景:
a=1 if b>6 else 3
注意,不能按照if else的習慣,寫成a=1 if b>6 else a=3
,因為1 if b>6 else 3本身就是一個表示式
迴圈指的是for迴圈,while迴圈,控制是break,continue關鍵字的使用,只需要記住以下幾點:
1.for迴圈:可設定迭代次數的迴圈
2.while迴圈:條件迴圈,不能設定迭代次數
3.break:終止整個迴圈
4.continue:跳過本次迴圈
迭代器和生成器在以往困惑了我很久,因此我在這裡特別記錄一下這個部分
在瞭解迭代器之前,先明白什麼是可迭代物件,一般來說,當建立了一個列表,集合,字典時,就生成了一個容器,比如:
一個列表[1,2,3,4]
就是一個容器,這就是一個可迭代物件,所謂可迭代物件指可通過for迴圈遍歷的物件。注意,目前這個容器並不能自己遍歷自己(通過物件自身的方法來遍歷自己,一般這個方法指的就是__next__)。到這裡,就該說出迭代器和可迭代物件的區別了,迭代器是具有__next__方法的可迭代物件。
通過iter()方法進行型別轉換後,可以將可迭代物件變成迭代器。在原檔案中,可迭代物件叫做iterable,迭代器叫做iterator,迭代器的__next__方法也有特點:只能迭代一次,不能返回到以前的索引,下面是相關範例,助於理解:
#迭代器與可迭代物件的區別,迭代器多了一個方法__next__
print("This is iterator")
li=iter([1,2,3])
print(next(li))
print("for迴圈開始")
for i in li:
print(i)
print("This is iterable")
lis=[1,2,3]
for i in lis:
print(i)
for i in lis:
print(i)
對於生成器,生成器必然是一個迭代器,生成器這個物件有兩種實現方式:第一種是用生成器表示式實現;第二種方式是由生成器函數實現
生成器表示式類似列表生成式,只是將[…]中括號換成(…)小括號,例如:
>>> li=(x for x in range(30) if x%3==0)
>>> li
<generator object <genexpr> at 0x7f79e7581d60>
用函數實現的生成器就是函數中使用了yield關鍵字,這就是為什麼看到yield總會牽扯到生成器這個物件的原因:
#生成器函數(帶yield關鍵字的函數)實現生成器
def func(n):
for i in range(n):
yield i**2
gen=func(6)
print(gen)
print(next(gen))
print("藉助for迴圈")
for item in gen:
print(item)
正如gen=func(6)的宣告,gen就是一個生成器,結果如下:
偵錯BUG,BUG的意思是昆蟲,那為什麼要叫找BUG,其實背後有個有趣的故事
在早期,人們使用繼電器程式設計,美國的一名海軍當時正在為完成一項任務進行程式設計,機器剛開始還好好的,但過了一會就出現了故障,每個實驗人員都覺得很奇怪,這名海軍爬上機器,線上路之中發現了飛蛾,飛蛾由於光和熱的吸引,靠近繼電器後被燒死,導致一組繼電器短路,於是這名海軍為機器偵錯取了一個形象的名字:找昆蟲,也就是找BUG
發現異常有助於我們偵錯程式碼,使程式更穩定,在python中,常見異常如下:
NameError: 存取到沒有宣告的變數
ZeroDivisionError: 除數是0
SyntaxError: 語法錯誤
IndexError: 索引超出範圍
KeyError :請求一個不存在的字典關鍵字
IOError: 輸入輸出錯誤,例如讀檔案,但檔案不存在
AttributeError: 存取到未知的物件屬性
ValueError: 傳給函數的引數型別不正確,例如給數值型引數傳遞了字串
通常,我們將有疑惑的程式碼放入try下,except會捕獲對應的異常,並執行對應指令:
try:
code
except ValueError:
print("值錯誤")
except NameError:
print("名稱錯誤")
else:
print("狀態良好")
除了系統發現異常,也可以通過關鍵字raise手動丟擲異常:
def addfunc(a,b):
if type(a)!=type(b):
raise ValueError('型別錯誤')
return a+b
addfunc(5,'a')