(二)Python基礎知識-函數

1、定義一個函數

Python 定義函數使用 def 關鍵字,一般格式如下:

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

2、無返回值函數案例

  • 定義一個無返回值的函數showResult
def showResult(s):
    print("顯示:", s)
  • 調用函數showResult
showResult("測試")
  • 輸出結果
顯示: 數據

3、有返回值函數案例

  • 定義一個有返回值的函數getResult
# 獲取結果函數
def getResult(num1, num2):
    return num1 + num2
  • 調用函數getResult
#其中str(int)是python自帶的轉換成字符串函數
print("返回結果:"+ str(getResult(10, 21)))
  • 輸出結果
返回結果:31

4、引用類型與基本數據類型傳參的函數的案例

  • 定義一個傳入不可變對象實例參數的函數changeBool
def changeBool(a):
    a = True
    print("changeBool函數內值:", a)
  • 調用函數changeBool
b = False
changeBool(b)
print("changeBool函數外值:", b)
  • 輸出結果
changeBool函數內值: True
changeBool函數外值: False

可以看到b的值並不會發生改變。


在看下面一個案例:

  • 定義一個# 傳入可變對象實例參數的函數changeList
def changeList(val):
    val.append(["1", "2", "3", "4"])
    print("changeList函數內值:", val)
    return
  • 調用函數changeList
myList = ["5", "6"]
changeList(myList)
print("changeList函數外值:", myList)
  • 輸出結果
changeList函數內值: ['5', '6', ['1', '2', '3', '4']]
changeList函數外值: ['5', '6', ['1', '2', '3', '4']]

可以看到myList 的值已經發生改變。
原因就在於基本類型和引用類型存儲區別

5、匿名函數

所謂匿名,意即不再使用 def 語句這樣標準的形式定義一個函數。python 使用 lambda 來創建匿名函數。

  • 定義一個有返回值的匿名函數sum
#求和
sum = lambda arg1, arg2: arg1 + arg2
  • 調用函數getResult
#其中str(int)是python自帶的轉換成字符串函數
print("匿名函數求和計算結果:"+str(sum(15,12)))
  • 輸出結果
匿名函數求和計算結果:27

6、靈活傳參方式的函數

調用函數時參數位置可以調換,只要調用時的參數命名與函數參數名一致即可自動對應,如showUserInfo;
可在方法的參數位置設置參數默認值如showUserInfo2,其中的age不傳時默認值爲18,傳參數age時,則爲age實際傳遞的值;
調用函數時,可以設置可設置不定長參數,如showAction。

# 不設置默認值函數
def showUserInfo(age, name):
    print("年齡:" + str(age))
    print("姓名:" + name)
    return

# 設置默認值函數
def showUserInfo2(name, age=18):
    print("年齡:" + str(age))
    print("姓名:" + name)
    return

# 不定長參數
def showAction(arg1,*vartuple):
    print(arg1,end=",")
    for var in vartuple:
        print(var,end=",")
    return
  • 調用函數showUserInfo、showUserInfo2、showAction
print(" ")
showUserInfo(age=30, name="小明")
print(" ")
showUserInfo(name="小紅", age=40)

print(" ")
showUserInfo2(name="小黑");
print(" ")

showUserInfo2(name="小黑", age=2);

print("")
showAction("參數1","不定長參數1","不定長參數2","不定長參數3")
print("")
  • 輸出結果
年齡:30
姓名:小明
 
年齡:40
姓名:小紅
 
年齡:18
姓名:小黑
 
年齡:2
姓名:小黑

參數1,不定長參數1,不定長參數2,不定長參數3

7、完整代碼

# 顯示結果函數
def showResult(s):
    print("顯示:", s)


# 獲取結果函數
def getResult(num1, num2):
    return num1 + num2


# 傳入不可變對象實例參數
def changeBool(a):
    a = True
    print("changeBool函數內值:", a)


# 傳入可變對象實例參數
def changeList(val):
    val.append(["1", "2", "3", "4"])
    print("changeList函數內值:", val)
    return


# 不設置默認值函數
def showUserInfo(age, name):
    print("年齡:" + str(age))
    print("姓名:" + name)
    return


# 設置默認值函數
def showUserInfo2(name, age=18):
    print("年齡:" + str(age))
    print("姓名:" + name)
    return

# 不定長參數
def showAction(arg1,*vartuple):
    print(arg1,end=",")
    for var in vartuple:
        print(var,end=",")
    return

#匿名函數 求和
sum = lambda arg1, arg2: arg1 + arg2

print("====開始執行====")
showResult("數據")

print("返回結果:"+ str(getResult(10, 21)))

b = False
changeBool(b)
print("changeBool函數外值:", b)

myList = ["5", "6"]
changeList(myList)
print("changeList函數外值:", myList)

# 這種方式傳參,參數名必須和方法參數名相同,否則不會輸出
changeList(val=["7", "8"])

print(" ")
# 變量名位置可以切換,只要保證與函數的變量名稱相同即可
showUserInfo(age=30, name="小明")
print(" ")
showUserInfo(name="小紅", age=40)

print(" ")
# 缺少參數時,會自動使用默認的參數
showUserInfo2(name="小黑");
print(" ")
# 有參數時,會自動使用傳遞的參數
showUserInfo2(name="小黑", age=2);

print("")
showAction("參數1","不定長參數1","不定長參數2","不定長參數3")
print("")

print("匿名函數求和計算結果:"+str(sum(15,12)))

print("====執行結束====")

8、總結

與Java相比函數的調用非常靈活,使用也並不複雜。
缺點是,可能出BUG的機率會比較大,所以要特別細心。

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