標籤:none ssi pytho 名稱 元素 exp ++ 代碼塊 標識符
函數定義
- 函數代碼塊以 def 關鍵詞開頭,後接函數標識符名稱和圓括弧()。
- 任何傳入參數和自變數必須放在圓括弧中間。圓括弧之間可以用於定義參數。
- 函數的第一行語句可以選擇性地使用文檔字串—用於存放函數說明。
- 函數內容以冒號起始,並且縮排。
- return [運算式] 結束函數,選擇性地返回一個值給調用方。不帶運算式的return相當於返回 None。
文法
def functionname( parameters ): "函數_文檔字串" function_suite return [expression]
可更改(mutable)與不可更改(immutable)對象
在 python 中,==strings, tuples, 和 numbers== 是不可更改的對象,而 ==list,dict== 等則是可以修改的對象。
- 不可變類型:
變數賦值 a=5 後再賦值 a=10,這裡實際是新產生一個 int 值對象 10,再讓 a 指向它,而 5 被丟棄,不是改變a的值,相當於新產生了a。
- 可變類型:
變數賦值 la=[1,2,3,4] 後再賦值 la[2]=5 則是將 list la 的第三個元素值更改,本身la沒有動,只是其內部的一部分值被修改了。
全域變數與局部變數
定義在函數內部的變數擁有一個局部範圍
定義在函數外的擁有全域範圍。
如果要把函數內部的變數聲明為外部的全域範圍,使用global聲明
傳參
#可寫函數說明def printme( str ): "列印任何傳入的字串" print str; return;prinme(‘My string‘)
#可寫函數說明def printme( str ): "列印任何傳入的字串" print str; return;#調用printme函數printme( str = "My string");
#可寫函數說明def printinfo( name, age = 35 ): "列印任何傳入的字串" print "Name: ", name; print "Age ", age; return;#調用printinfo函數printinfo( age=50, name="miki" );printinfo( name="miki" );
- 不定長參數
傳入列表時,加入一個星號
傳入字典時,加入兩個星號
# 可寫函數說明def printinfo( arg1, *vartuple ): "列印任何傳入的參數" print "輸出: " print arg1 for var in vartuple: print var return;# 調用printinfo 函數printinfo( 10 );printinfo( 70, 60, 50 );
匿名參數lambda
- lambda只是一個運算式,函數體比def簡單很多。
- lambda的主體是一個運算式,而不是一個代碼塊。僅僅能在lambda運算式中封裝有限的邏輯進去。
lambda函數擁有自己的命名空間,且不能訪問自有參數列表之外或全域命名空間裡的參數。
- 雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內嵌函式,後者的目的是調用小函數時不佔用棧記憶體從而增加運行效率。
文法lambda [arg1 [,arg2,.....argn]]:expression# 可寫函數說明sum = lambda arg1, arg2: arg1 + arg2;# 調用sum函數print "相加後的值為 : ", sum( 10, 20 )
Python函數詳細總結