目錄
數據類型
Number
整數
浮點數
字符串
字符串的拼接
字符串的處理(8種常用)
'本身也是字符的情況
轉義字符
布爾值
布爾值可以用and、or和not運算。
補充
空值
注意事項
List(列表)
列表函數
Tuple(元組)
dict(dictionary)
字典函數
dict查找不到的情況
set(集合)
集合函數
函數
定義函數
參數檢查
返回多個值
調用函數
函數的參數
位置參數
默認參數
可變參數
遞歸函數
IO文件讀寫
讀取文件
寫文件
循環語句
for循環
for循環嵌套
while循環
while循環嵌套
迭代器
異常處理
捕獲異常try...except...
捕獲多個異常
不可變數據類型:Number、String、Tuple
可變數據:List、Dictionary、Setumber
Number具體分為:int(整數)、float(浮點數即小數)、String(字符串)、bool(布爾值)
Python可以處理任意大小的整數,當然包括負整數,表示方法與數學的寫法一致。
允許在數字中間以_分隔
10_000_000_000和10000000000
浮點數也就是小數,之所以稱為浮點數,是因為按照科學記數法表示時,一個浮點數的小數點位置是可變的。浮點數可以用數學寫法,如1.23,-9.01等等。
在Python中 科學計數法中把10用e替代。
字符串是以單引號'或雙引號"括起來的任意文本。
用逗號拼接,則逗號位會出現空格。
用加號拼接,不會出現空格。如果想有空格,則應在其中加入空格
print("Hello","World") #輸出:Hello World
print("Hello"+"World") #輸出:HelloWorld
print("Hello"+" "+"World") #輸出:Hello World
len():返回字符串的長度,即字符串中單個元素的個數
length=len(target_string) #target-string為目標字符串變量
upper():將字符串中的所有字符都轉換為大寫
lower():將所有字符轉換為小寫
title():將字符串所有單詞的首字母變成大寫,而其他字母依然小寫
new_string="Tom is good"
print(name_string.upper()) #輸出:TOM IS GOOD
print(name_string.lower()) #輸出:tom is good
print(name_string.title()) #輸出:Tom Is Good
strip():可以去除字符串兩側(不包含內部)全部的空格。使用該方法,也可以通過指定參數,去除兩側指定的特定字符
split():實現字符串分割。該方法根據提供的分隔符,將一個字符串分割為字符列表,如果不提供分隔符,則程序會默認把空格(制表、換行等)作為分隔符。
find():利用該方法可以在一個較長的字符串中查找子字符串。如果該字符串中,有一個或者多個子字符串,則該方法返回第一個子串所在位置的最左端索引,若沒有找到符合條件的子串,則返回-1。
replace():用以替換給定字符串中的子串。
source_string.replace(old_string, new_string)
用""括起來
轉義字符\可以轉義很多字符,比如\n表示換行,\t表示制表符,字符\本身也要轉義,所以\\表示的字符就是 \ 。
當字符串裡即既包含 ' 又包含 ",用轉義字符
特例:
用r''表示''內部的字符串默認不轉義
用'''...'''的格式表示多行內容
在Python中,可以直接用True、False表示布爾值(請注意大小寫)
and運算是與運算,只有所有都為True,and運算結果才是True
or運算是或運算,只要其中有一個為True,or運算結果就是True
not運算是非運算,它是一個單目運算符,把True變成False,False變成True
None不能理解為0,因為0是有意義的,而None是一個特殊的空值。
Python的語法:縮進方式(沒有規定縮進是幾個空格還是Tab,慣例為4個空格的縮進)
Python大小寫敏感。
List是一種有序的集合,可以作為一個方括號內的逗號分隔值出現。List裡面的元素的數據類型也可以不同,可以隨時添加和刪除其中的元素。List元素也可以是另一個List(但是另一個List只算一個元素,可以理解為一個二維數組)。
List中一個元素也沒有,就是一個空的list,它的長度為0
格式:List=['a','b','c']
len(list) #獲得list元素的個數
list.append(obj) #在列表末尾添加新的對象
list.count(obj) #統計某個元素在列表中出現的次數
list.extend(seq) #在列表末尾一次性追加另一個序列中的多個值(用新列表擴展原來的列表)
list.index(obj) #從列表中找出某個值第一個匹配項的索引位置
list.pop() #移除列表中的一個元素(默認最後一個元素),並且返回該元素的值
list.remove() #移除列表中某個值的第一個匹配項
list.reverse() #反向列表中元素
list.sort(key=None,reverse=False) #對原列表進行排序,True 降序,False 升序(默認)
list.clear() #清空列表
list.copy() #復制列表
tuple與list非常類似,但是一旦初始化就不能修改。
其他獲取元素的方法和list是一樣的,但不能賦值成另外的元素。
只有1個元素的tuple定義時必須加一個逗號,Python在顯示只有1個元素的tuple時,也會加一個逗號,,以免你誤解成數學計算意義上的括號。
tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變。
Python內置了字典:dict的支持,dict全稱dictionary,在其他語言中也稱為map,使用鍵-值(key-value)存儲,具有極快的查找速度。
d = {key1 : value1, key2 : value2 }
原理:先在字典的索引表裡(比如部首表)查這個字對應的頁碼,然後直接翻到該頁,找到這個字。
注意:dict內部存放的順序和key放入的順序是沒有關系的
radiansdict.clear() #刪除字典內所有元素
pop(key[,default]) #刪除字典給定鍵 key 所對應的值,
#返回被刪除的值。key值必須給出。 否則,返回default值
當查找不到時就會報錯,所以有兩種方法避免報錯。
一是通過in判斷key是否存在:'' in list
二是通過dict提供的get()方法,如果key不存在,可以返回None,或者自己指定的value
集合是一個無序的不重復元素序列,可以使用大括號 { } 或者 set() 函數創建集合
set和dict類似,也是一組key的集合,但不存儲value。由於key不能重復,所以,在set中,沒有重復的key。
注意: 建一個空集合必須用 set() 而不是 { },因為 { } 是用來創建一個空字典
重復元素在set中自動被過濾
s.add() #為集合添加元素
s.clear() #移除集合中的所有元素
s.copy() #拷貝一個集合
s.remove() #刪除元素
函數是組織好的,可重復使用的,用來實現單一,或相關聯功能的代碼段。
函數能提高應用的模塊性,和代碼的重復利用率。
格式:
def 函數名():
代碼
空函數
如果想定義一個什麼事也不做的空函數,可以用pass語句(pass可以用來作為占位符):
def nop():
pass
調用函數時,如果參數個數不對,Python解釋器會自動檢查出來,並拋出TypeError。但是如果參數類型不對,Python解釋器就無法幫我們檢查。
返回值是一個tuple!但是,在語法上,返回一個tuple可以省略括號,而多個變量可以同時接收一個tuple,按位置賦給對應的值,所以,Python的函數返回多值其實就是返回一個tuple,但寫起來更方便。
格式:
函數名()
每次調用函數時,函數都會從頭開始執行,當這個函數中的代碼執行完畢後,意味著調用結束了。當然了如果函數中執行到了return也會結束函數。
例:power(x) #x即為位置參數
當括號裡有兩個以上的參數時,實參要按照形參的順序擺放,傳入。
默認參數可以簡化函數的調用。最大的好處是能降低調用函數的難度。
def enroll(name,city='Beijing'):
print('name:',name)
print('city:',city)
enroll('Jim')
注意:
一是必選參數在前,默認參數在後,否則Python的解釋器會報錯(思考一下為什麼默認參數不能放在必選參數前面);
二是如何設置默認參數。
當函數有多個參數時,把變化大的參數放前面,變化小的參數放後面。變化小的參數就可以作為默認參數。
在Python函數中,還可以定義可變參數。顧名思義,可變參數就是傳入的參數個數是可變的,可以是1個、2個到任意個,還可以是0個。
要定義出這個函數,我們必須確定輸入的參數。由於參數個數不確定,我們首先想到可以把a,b,c……作為一個list或tuple傳進來。但是調用的時候,需要先組裝出一個list或tuple。
定義可變參數和定義一個list或tuple參數相比,僅僅在參數前面加了一個*號。在函數內部,參數numbers接收到的是一個tuple,因此,函數代碼完全不變。但是,調用該函數時,可以傳入任意個參數,包括0個參數。
*nums表示把nums這個list的所有元素作為可變參數傳進去。
在函數內部,可以調用其他函數。如果一個函數在內部調用自身本身,這個函數就是遞歸函數。
遞歸函數的優點是定義簡單,邏輯清晰。理論上,所有的遞歸函數都可以寫成循環的方式,但循環的邏輯不如遞歸清晰。
使用遞歸函數需要注意防止棧溢出。解決遞歸調用棧溢出的方法是通過尾遞歸優化,事實上尾遞歸和循環的效果是一樣的,所以,把循環看成是一種特殊的尾遞歸函數也是可以的。
尾遞歸是指,在函數返回的時候,調用自身本身,並且,return語句不能包含表達式。這樣,編譯器或者解釋器就可以把尾遞歸做優化,使遞歸本身無論調用多少次,都只占用一個棧幀,不會出現棧溢出的情況。
在磁盤上讀寫文件的功能都是由操作系統提供的,現代操作系統不允許普通的程序直接操作磁盤,所以,讀寫文件就是請求操作系統打開一個文件對象(通常稱為文件描述符),然後,通過操作系統提供的接口從這個文件對象中讀取數據(讀文件),或者把數據寫入這個文件對象(寫文件)。
使用Python內置的open()函數,傳入文件名和標示符,標識符'r'表示讀。
f=open('F:\eclipse\eclipse\sy9T3.txt','r')
文件不存在則會拋出FileNotFoundError。
成功打開文件後,調用read()方法一次性讀完文件的全部內容。
f.read();
最後調用close()方法關閉文件文件使用完畢後必須關閉,因為文件對象會占用操作系統的資源,並且操作系統同一時間能打開的文件數量也是有限的。
f.close()
為了避免文件內容過多,反復調用read(size)方法,每次最多讀取size個字節的內容。
其中readline()可以每次讀取一行內容,調用readlines()一次讀取所有內容並按行返回list。
IOError異常處理
由於文件讀寫時都有可能產生IOError,一旦出錯,後面的f.close()就不會調用。所以,為了保證無論是否出錯都能正確地關閉文件,我們對異常提前進行處理:
方法一:
try...finally
try:
f = open('/path/to/file', 'r')
print(f.read())
finally:
if f:
f.close()
方法二:
引入with
with open('/path/to/file', 'r') as f:
print(f.read())
第二種方法代碼更佳簡潔,並且不必調用f.close()方法。
UnicodeDecodeError異常處理
read()時可能會拋出UnicodeDecodeError(encoding不管是用utf8、gb2312、gbk編碼方式都不行)
解決辦法:
改為以二進制的方式讀取即可:open('xxx.xsl','rb')
f=open('F:\eclipse\eclipse\sy9T3.txt','rb')
f.read()
寫文件和讀文件是一樣的,唯一區別是調用open()函數時,傳入標識符'w'或者'wb'表示寫文本文件或寫二進制文件:
f=open('F:\eclipse\eclipse\sy.txt','w')
f.write("I love Python!")
f.close()
進行完上面的操作後,點開文件
注:1.只有調用close()方法時,操作系統才保證把沒有寫入的數據全部寫入磁盤。
2.以'w'模式寫入文件時,如果文件已存在,會直接覆蓋(相當於刪掉後新寫入一個文件)。
可以傳入'a'以追加(append)模式寫入 追加到文件末尾
f=open('F:\eclipse\eclipse\sy.txt','a')
f.write("end")
f.close()
for x in ...循環就是把每個元素代入變量x,然後執行縮進塊的語句。
for each in range(3):
print(each)
0
1
2
Python提供一個range()函數,可以生成一個整數序列,再通過list()函數可以轉換為list
list=['eat','sleep','study']
for act in list:
print("正在",act)
正在 eat
正在 sleep
正在 study
range(101)就可以生成0-100的整數序列
for iteration_var in sequence:
for iteration_var in sequence:
循環語句
只要條件滿足,就不斷循環,條件不滿足時退出循環。
while i<3: #判斷條件
print(i) #循環語句
i=i+1
0
1
2
在循環中,break語句可以提前退出循環
在循環過程中,也可以通過continue語句,跳過當前的這次循環,直接開始下一次循環
用Ctrl+C退出程序,或者強制結束Python進程
while 判斷條件:
while 判斷條件:
循環語句
迭代器用來循環訪問一系列元素,它不僅可以迭代序列,也可以迭代不是序列但是表現出序列行為的對象。迭代器很適用於迭代一些無法預先知道元素總數的巨大的集合。迭代器提供了一個統一的訪問集合的接口,定義iter()方法對象,就可以使用迭代器訪問。
可以被next()函數調用並不斷返回下一個值的對象稱為迭代器:Iterator。next()函數訪問每一個對象,直到對象訪問完畢,返回一個StopIteration異常。使用isinstance()可以判斷一個對象是否是Iterator對象。
所有的Iterable都可以通過iter()函數轉化為Iterator。
try:
print("....")
except IOError:
pass
try中放的是可能產生異常的代碼。當產生錯誤時,跳轉到except中運行七處理異常的方法。
如果想通過一次except捕獲到多個異常可以用一個元組的方式
try:
print("...") #代碼
except (IOError,NameError):
pass
或者針對不同的異常進行不同的處理
try:
ptint("....")
except NameError:
print("nameerror")
except IOError:
print("IOError")
注:父類的異常要放到其子類的後面,否則永遠不會有子類異常處理
另外,還可以使用try...except...else語句,當try中的語句沒有發生異常時,else中的代碼就會被執行。還可以再else後面加上finally,finally中的語句,不管try中有沒有發生有異常都會執行。
自定義異常
自定義異常類繼承自 Exception 類,可以直接繼承,或者間接繼承。
(0) Abstract # Course link : n
taxi_bbox[id].append(sort_data