標籤:dead append 全域變數 參數傳遞 add 變數 glob 修改 cti
函數的定義
Python 使用關鍵字def定義函數,格式與C語言類似,但是沒有傳回型別,參數也不需要設定類型。
def add(a, b): """這是函數的文檔字串""" return a + bdef append(data): data.append(a) #如果data為可變對象時候,例如List、Dict,則會改變實參的值
函數調用 會為函數局部變數產生一個新的符號表。確切的說,所有函數中的變數賦值都是將值儲存在局部符號表。變數引用首先在局部符號表中尋找,然後是包含函數的局部符號表,然後是全域符號表,最後是內建名字表。因此,全域變數不能在函數中直接賦值(除非用 global 語句命名),儘管他們可以被引用。
Python參數傳遞採用的肯定是“傳對象引用”的方式。這種方式相當於傳值和傳引用的一種綜合。如果函數收到的是一個可變對象(比如字典或者列表)的引用,就能修改對象的原始值--相當於通過“傳引用”來傳遞對象。如果函數收到的是一個不可變對象(比如數字、字元或者元組)的引用,就不能直接修改原始對象--相當於通過“傳值‘來傳遞對象。
參數
預設參數: 為參數設定預設值,調用函數時,如果沒有值即使用預設值。
def login(username,password = "123"): """登入函數""" passlogin("admin")login("admin","password")def f(a, L=[]): L.append(a) return Lprint(f(1))print(f(2))print(f(3))# 輸出結果[1][1, 2][1, 2, 3]>>> def f(x = []):... x.append(1)... print(id(x))... >>> f()140693834878408>>> f()140693834878408>>> f()140693834878408>>>
關鍵字參數調用:即指定形式key = value來調用函數,關鍵字參數應該在位置參數後面。
def parrot(voltage, state=‘a stiff‘, action=‘voom‘, type=‘Norwegian Blue‘): print("-- This parrot wouldn‘t", action, end=‘ ‘) print("if you put", voltage, "volts through it.") print("-- Lovely plumage, the", type) print("-- It‘s", state, "!")# 以下調用均是錯誤的parrot() # 必須參數沒有parrot(voltage=5.0, ‘dead‘) # 關鍵字參數必須在位置參數之後parrot(110, voltage=220) # **任何參數都不可以多次賦值**parrot(actor=‘John Cleese‘) # 不存在該參數名
Python tutorial閱讀之函數的定義與使用