1、Python中的變數沒有類型的概念
例如,建立一個List,如下
Movies =["hello", "python", "haha"] # 建立列表print(len(Movies)) # 列印Movies的長度Movies.pop("python")
2、判斷一個變數是不是list類型
M = ['A', ['B', ['C', 'D','E']]]for x in M: if isinstance(x, list): for y in x: if isinstance(y, list): for z in y: print(z) else: print(y) else: print(x)
3、定義和使用函數
M = ['A', ['B', ['C', 'D','E']]] def Pr(A): #定義函數Pr for x in A: print(x)
Pr(M) # 調用函數Pr
4、String是不可改變的變數
在Python中,一旦一個字串被建立之後,它就不能再改變
s = ' hellopython '
s =s.strip() # 去掉s中開頭及結尾的空白字元
此外,tuple也是不可變的變數,所有的數字變數也都不可變。
5、變數並不真正擁有資料
Pythonvariables contain a reference to data object which contains thedata.
6、幾種內建的函數
- range(N): 返回0到N-1之間的整數
- list()
- enumerate()
- int()
- id()
- next()
內建函數(build-in functions,BIF)所在的命名空間為__builtins__
以下程式將在螢幕上連續列印出5個a:
for i inrange(5):
print('a', end='')
7、顯示和改變目前的目錄,並讀取指定檔案的內容
import osprint(os.getcwd()) # 獲得目前的目錄os.chdir('..') # 跳轉到上一層目錄print(os.getcwd())file =open('test.txt') # 開啟檔案test.txtprint(file.readline(), end='') # 從file中讀取一行print(file.readline(), end='') #讀取的一行包含最後的\nprint(file.readline(), end='')file.seek(0) # 回到檔案的開頭位置'''讀取檔案中的每一行文本並輸出'''for line in file: print(line, '') #每行最後的\n會被輸出,但是print不會添加額外的分行符號file.close()
8、切分(split)字串
str = 'hello,world,hello,python' for x in str.split(','): print(x, end=':') # 輸出 hello:world:hello:pythonfor x in str.split(',', 1): print(x, end=':') # 輸出 hello:world,hello,pythonfor x in str.split(',', 2): print(x, end=':') # 輸出 hello:world:hello,python for x in str.split(',',3): print(x, end=':) #輸出 hello:world:hello:python
如果要切分的字串是空行,則會出錯,可以用find來檢測
data = open('test.txt')for x in data: if x.find(',') != -1 : print(s.split(','))
其中,也可以將檢測的語句改為
if not x.find(',') == -1 :
9、異常處理
try: data = open('test.txt') for line in data: try: print(line.split(',')) except ValueError: pass # 直接跳過 data.close()exceptIOError: print('檔案不存在')
ValueError: a ValueError occurs when your data does notconform to the expected format
IOError: an IOError occurs when your data can not beaccessed properly
9、定位異常的類型
try: file =open("misssing.txt") # 該檔案(missing.txt)實際上並不存在 print(file.readline(), end='')except: print('file does not exist')finally: file.close() # 報異常:NameError: name 'file' is not defined
這是因為檔案missing.txt不存在,因此open("missing.txt")會拋出異常,因而file不存在。為了修複這個bug,可以在關閉file之前測試file是否存在,如
...finally: if 'file' in locales(): # 注意這裡的引號不可少 file.close()
thelocalesBIF returns a collection of names defined in thecurrent scope.
When an exception is raised and handled by yourexcept suite, the Python interpreter passes anexception object into thesuite.
try: file = open("misssing.txt") print(file.readline(), end='')except IOError as err: print('file does not exist : ' + str(err)) print(err)finally: if 'file' in locals(): file.close()
輸出為:
file does not exist : [Errno 2] No such file or dir
[Errno 2] No such file or directory: 'misssing.txt'
這裡,BIF str將err轉化為字串。
10、使用with來處理檔案相關操作
在上例中,我們顯式地關閉了已開啟的檔案,使用with關鍵字則可以簡化這些操作。
try:with open('man.txt', 'w') as man:print('this is man', file=man)with open('other.txt', 'a') as other:print('this is other', file=other)except IOError:print('file does not exist')
通過使用with和as關鍵字,我們就不需要手動地去關閉開啟檔案了(Python會自動地關閉檔案,即使發生了異常)。在Python中,這種技術叫做context management protocol
上例還可以寫成
try:with open('man.txt', 'w') as man, open('other.txt', 'a') as other:print('this is man', file=man)print('this is other', file=other)except IOError:print('file does not exist')
11、使用pickle來儲存和讀取資料
pickle是Python的標準庫,可以用於儲存和讀取任意格式的資料,類似於Java中的序列化機制。
import pickle # 必須匯入pickle模組with open('man.txt', 'wb') as man: # 必須以二進位模式開啟檔案pickle.dump([1, 2, 3, ['A', 'B', 'C']], man)with open('man.txt', 'rb') as man:A = pickle.load(man)print(A)
運行結果為
[1, 2, 3, ['A', 'B', 'C']]