python 函式
函式是組織好的,可重複使用的,用來實現單一,或相關聯功能的**段。
函式能提高應用的模組性,和**的重複利用率。你已經知道python提供了許多內建函式,比如print()。但你也可以自己建立函式,這被叫做使用者自定義函式。
定義乙個函式
def
functionname
( 引數 ):
函式體return [expression]
函式呼叫
定義乙個函式只給了函式乙個名稱,指定了函式裡包含的引數,和**塊結構。
這個函式的基本結構完成以後,你可以通過另乙個函式呼叫執行,也可以直接從python提示符執行
# 定義函式
defprintme
( str ):
print str; #輸出傳入的str
return;
# 呼叫函式
printme("我要呼叫使用者自定義函式!");
可更改(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沒有動,只是其內部的一部分值被修改了。
python 函式的引數傳遞:
不可變型別:類似 c++ 的值傳遞,如 整數、字串、元組。如fun(a),傳遞的只是a的值,沒有影響a物件本身。比如在 fun(a)內部修改 a 的值,只是修改另乙個複製的物件,不會影響 a 本身。
可變型別:類似 c++ 的引用傳遞,如 列表,字典。如 fun(la),則是將 la 真正的傳過去,修改後fun外部的la也會受影響
python 中一切都是物件,嚴格意義我們不能說值傳遞還是引用傳遞,我們應該說傳不可變物件和傳可變物件。
python 傳不可變物件例項
def
changeint
( a ):
a = 10
b = 2
changeint(b)
print b # 結果是 2
例項中有 int 物件 2,指向它的變數是 b,在傳遞給 changeint 函式時,按傳值的方式複製了變數 b,a 和 b 都指向了同乙個 int 物件,在 a=10 時,則新生成乙個 int 值物件 10,並讓 a 指向它。
傳可變物件例項
# 可寫函式說明
defchangeme
( mylist ):
"修改傳入的列表"
print
"函式內取值: ", mylist
return
# 呼叫changeme函式
mylist = [10,20,30];
changeme( mylist );
print
"函式外取值: ", mylist
函式內取值: [10, 20, 30, [1, 2, 3, 4]]
函式外取值: [10, 20, 30, [1, 2, 3, 4]]
傳參:
除了正常的單參和多參傳輸外,py有一種特殊的傳參方式
不定長引數
def
functionname
([formal_args,] *var_args_tuple ):
"函式_文件字串"
function_suite
return [expression]
加了星號(*)的變數名會存放所有未命名的變數引數。選擇不多傳引數也可。
# 可寫函式說明
defprintinfo
( arg1, *vartuple ):
"列印任何傳入的引數"
print
"輸出: "
print arg1
for var in vartuple:
print var
return;
# 呼叫printinfo 函式
printinfo( 10 );
printinfo( 70, 60, 50 );
輸出:
10 輸出:
70 60
50匿名函式
python 使用 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 )
print
"相加後的值為 : ", sum( 20, 20 )
補充:
全域性變數想作用於函式內,需加 global
globvar = 0
defset_globvar_to_one
():global globvar # 使用 global 宣告全域性變數
globvar = 1
defprint_globvar
(): print(globvar) # 沒有使用 global
set_globvar_to_one()
print globvar # 輸出 1
print_globvar() # 輸出 1,函式內的 globvar 已經是全域性變數
Python入門基礎知識 5 數學函式
importmath 浮點數相關函式 importcmath 複數運算相關函式 1.math.pi 圓周率 2.math.e e 自然常數 absolute 絕對值 返回x的絕對值。ceil 進一法取整 返回比x大的最小整數。返回比x小的最大整數。返回e的x次方。1.x為對數,base為底數,不指明...
python基礎5 函式
函式 函式的作用 函式 是用於對重複 塊的封裝,解決 重複的問題 語法 def 函式名 形式引數 函式體 重複 塊 return 資料 1.定義函式 不會執行函式體的 2.必須呼叫函式的時候才會執行封裝的 塊 呼叫語法 函式名 3 函式必須先定義 再呼叫 例 封裝乙個函式,實現99乘法表 defcf...
python入門學習 函式基礎
認識函式 在乙個完成的專案中,某些功能會反覆的使用,那麼會講功能封裝成函式,當我們要使用功能的時候直接呼叫函式即可 本質 函式對功能的封裝 有點 1 簡化 的結構名,增加 的復用度 重複使用的程度 2 如果想修改某個功能或者某個bug,只需要修改物件的函式即可 函式定義 格式def 函式名 引數列表...