tuple所謂的“不變”是說,tuple的每個元素,指向永遠不變 “可變的”tuple t = (1,[2,3]) t[1][1]='4' print(t); # (1, [2, '4']) 要定義一個只有1個元素的tuple 因爲括號()既可以表示tuple,又可以表示數學公式中的小括號,這就產生了歧義,因此,Python規定,這種情況下,按小括號進行計算,計算結果自然是1。 t = (1); print(t) # 1 被當作括號 所以,只有1個元素的tuple定義時必須加一個逗號,,來消除歧義 t = (1,) # (1,) % 格式化字符串 %s表示用字符串替換,%d表示用整數替換,%f表示浮點數, %+顯示正負號,%-左對齊,%0 補零,%[-+0寬度.精度] print('%0+7.2f' %(1.123456)) 7位,小數點後取2位,不夠補0,前面使用了正負號 # +001.12 set和dict類似,也是一組key的集合,但不存儲value。由於key不能重複,所以,在set中,沒有重複的key。 print(set([1,2,2,2,2,3,4,5])) # {1, 2, 3, 4, 5} 定義函數時,需要確定函數名和參數個數; 如果有必要,可以先對參數的數據類型做檢查; 函數體內部可以用return隨時返回函數結果; 函數執行完畢也沒有return語句時,自動return None。 函數可以同時返回多個值,但其實就是一個tuple。 def hello(x = 1,y = 2, *o) : # *x 可變參數 '函數說明' pass return x, y print(hello(3,4)); # (3, 4) def world (l = []) : # 默認參數指向對象的問題 l.append('hello'); return l; print(world()) print(world()) # ['hello'] # [‘hello', 'hello'] def world (l = None) : if l is None : l = [] l.append('hello') return l print(world()) print(world()) # ['hello'] # ['hello'] 關鍵字參數 函數的調用者可以傳入任意不受限制的關鍵字參數。至於到底傳入了哪些,就需要在函數內部通過kw檢查 def hello(x = 1,y = 2, **o) : # **o 關鍵字參數 '函數說明' if 'name' in o : print (o['name']) return hello(3,4, name = 'leyi') # leyi 命名關鍵字參數 如果要限制關鍵字參數的名字,就可以用命名關鍵字參數, 和關鍵字參數**kw不同,命名關鍵字參數需要一個特殊分隔符*,*後面的參數被視爲命名關鍵字參數 , 如果函數定義中已經有了一個可變參數,後面跟着的命名關鍵字參數就不再需要一個特殊分隔符*了,如果沒有可變參數,就必須加一個*作爲特殊分隔符 def hello(x = 1,y = 2, *, name) : # *name 爲命名關鍵字參數 '函數說明' print(name) return hello(3,4, name = 'leyi') # leyi 匿名函數 l = lambda x, y : x *y print(l(2,3)) # 6 裝飾器 在代碼運行期間動態增加功能的方式,稱之爲“裝飾器”(Decorator), 本質上,decorator就是一個返回函數的高階函數 def middleFunction (fn) : def wrapper(*args) : print("插入的功能", fn.__name__) return fn(*args) return wrapper @ middleFunction def hello () : print('hello world') hello() 模塊的標準文件模板 #!/usr/bin/env python3 # -*- coding: utf-8 -*- ‘module description’ __author__ = ‘leyi’ # code def hello () : pass # 命令行運行該模塊時執行 if __name__=='__main__': hello() __xxx__這樣的變量是特殊變量 類似_xxx和__xxx這樣的函數或變量是非公開的(private)(規範)