Python基礎學習——函數

基礎規則:
函數代碼塊以def關鍵詞開頭,後接函數標識符名稱和圓括號()

def 函數名(參數列表):
    函數體

任何傳入參數和自變量必須放在圓括號中間,圓括號之間可以用於定義參數(可多個,但儘量不要多於四個)。
函數的第一行語句可以選擇性地使用文檔字符串——用於存放函數說明。
函數內容以冒號起始,並且縮進。
return [表達式]結束函數,選擇性地返回一個值給調用方。不帶表達式的return相當於返回 None。

def area(width, height):
    return width * height
w = int(input("請輸入寬"))
h = int(input("請輸入高"))
print("面積是 =", area(w, h))

函數調用
定義函數,指定函數所包含的參數和代碼塊結構,通過另一個函數進行調用執行。

def zhengyuting(str):
    print(str)
    return
zhengyuting("Expecto Patronum!")  #調用函數
zhengyuting("Ridiculous!")     #再次調用函數

參數傳遞

zyt=[1,2,3,4,5]  #[1,2,3,4,5]的類型爲List
zyt="zhnegyuting" #"zhnegyuting" 的類型爲String,zyt沒有類型,它是一個變量,是一個對象的引用(一個指針),可以指向各種類型

參數
調用函數時可以使用的參數類型:
①必需參數:以正確的順序傳入函數,調用時的數量和聲明時的一致,調用函數時必須傳入參數,否則報錯。
在這裏插入圖片描述
②關鍵字參數
函數調用使用關鍵字參數來確定傳入的參數值,使用關鍵字參數允許與聲明時的不一致(Python解釋器能夠用參數名匹配參數值)

def zhengyuting(str):
    print(str)
    return
zhengyuting(str = "Expecto Patronum!")  #使用參數名進行函數調用

③默認參數
調用函數時,沒有傳遞參數,則使用默認參數。
在這裏插入圖片描述
④不定長參數
一個函數能處理比當初聲明時更多的參數。
使用一個星號即*以元組形式導入。(單獨出現星號 * 後的參數必須用關鍵字傳入。)
使用兩個星號即**的參數會以字典的形式導入。

 def f(a,b,*,c):
     return a+b+c
f(1,2,3)   # 報錯
f(1,2,c=3) # 正常
def zhengyuting(one,*thetuple):  #使用星號*的參數以元組形式導入,以存放所有未命名變量參數
    print(one)
    print(thetuple)
zhengyuting(1,2,3,4)

在這裏插入圖片描述
如果在函數調用時沒有指定參數,它就是一個空元組,可以不向函數傳遞未命名的變量。
對象
可更改對象(可變類型):list,dict(類比:整容)
不可更改對象(不可變類型):string,tuples,numbers(類比:換人)
可更改表示它本身沒有改變,只是它內部的一部分值被改變。
不可更改的對象在被修改時,實際上已經是新的對象。
可變類型在參數傳遞時,函數外部的參數也會受到影響,而不可變類型則不會受到影響。

#可變類型
def zhengyuting(zytlist):
    zytlist.append([1,2,3])
    print("inner",zytlist)
    return
zytlist=[4,5,6]
zhengyuting(zytlist)
print("outer",zytlist)

在這裏插入圖片描述

#不可變類型
def zhengyuting(a):
    a = 3
b = 1
zhengyuting(b)
print(b)

在這裏插入圖片描述
匿名函數
lambda 可以創建匿名函數。
匿名即不再使用 def 語句這樣標準的形式定義一個函數。
lambda的主體是一個表達式,而不是一個代碼塊。僅僅能在lambda表達式中封裝有限的邏輯進去。lambda 函數擁有自己的命名空間,且不能訪問自己參數列表之外或全局命名空間裏的參數。雖然lambda函數看起來只能寫一行,卻不等同於C或C++的內聯函數,後者的目的是調用小函數時不佔用棧內存從而增加運行效率。
語法格式:

lambda [arg1 [,arg2,.....argn]]:expression

在這裏插入圖片描述

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章