目錄
目錄
前言
分模組思想,分任務程式設計,是程式設計的一大重要思維,其中的實現,函式就擔當了一個重要角色,今天我們就來學習Python的初級函式。
(一)函式的基本知識
(1)函式的優點
- 體積小,減少記憶體大小,冗餘度小。
- 重用性強,可重複利用。
- 維護方便。
- 分解任務,簡化邏輯,使程式碼更加模組化。
(2)函式的分類
- 內建函式
- 三方函式
- 自定義函式
(二)函式的基本使用
==1.函式的簡單定義==
(1)語法說明
def 函式名():
函式體
(2)原始碼
# 定義一個簡單函式
def test():
print(2**2)
print(2**3)
print(2**4)
# 呼叫函式
test()
(3)輸出效果
==2.傳值函式==
(1)語法說明
定義語法:
def 函式名(var1,var2,……)
函式體
呼叫的時候,有兩種方式:
- 順序呼叫,要求實參與形參一一對應。
- 關鍵字呼叫,可以不按照順序呼叫。
(2)原始碼
# 定義一個帶引數的函式
def test(var1, var2):
print(var1+var2)
print(var1**2+var2**2)
print(var1**3+var2**3)
# 順序呼叫帶引數的函式
print("順序呼叫")
test(1, 2)
# 關鍵字呼叫帶引數函式
print("關鍵呼叫")
test(var2=2, var1=1)
(3)輸出效果
==3.不定長函式==
(1)語法說明
當形參為下面兩種形式的時,為不定長引數
- *args — 接收為元組型別, 只要使用星號就可以,名字沒關係,習慣用args而已。
- **kwargs —接收為字典型別。其傳值時,必須是關鍵字傳值。
注意:裝包與拆包
- 裝包:args與kwargs 就是表示整個元組與字典的整體,叫裝包
- 拆包:*args 與 **kwargs 表示元組和字典的每個元素,叫拆包
(2)原始碼
# 定義不定長的引數- *args 接收的是元組型別
def test1(*args):
print(args, type(args))
print(*args)
# 定義不定長的引數- *args 接收的是字典型別
def test2(**kwargs):
print(kwargs, type(kwargs))
# 輸出keyword
print(*kwargs)
# 使用value,不能列印出來,不過可以使用
# 而且形參與實參的keyword一樣,其實就是關鍵字呼叫
test3(**kwargs)
def test3(a, b, c):
print(a)
print(b)
print(c)
# 呼叫引數,並接收的是 元組
test1(1, 2, 3)
# 呼叫引數,並接收的是 字典
test2(a="zsj", b=18, c="m")
(3)輸出效果
==4.預設函式==
(1)語法說明
在定義函式的時候,給形參賦值,就是預設函式,所賦的值便是預設值,
def test(name=”me”)
而在呼叫的時候,可以傳入引數,也可以不傳入引數。
傳入引數時,以所傳的引數優先。
不傳入引數時,為預設值。
(2)原始碼
# 定義預設引數
def test(name="zyg"):
print(name)
# 不傳入引數, 預設值
test()
# 傳入引數,優先值是傳入的值
test("me")
(3)輸出效果
==5.函式的傳值過程==
(1)語法說明
在python裡函式的傳值:都是==引用傳遞==
- 值傳遞(從實參複製一個副本)傳遞給形參
- 引用傳遞(直接把實參的id)傳給形參
Python的可變資料型別與不可變資料型別
- 可變資料型別:value值改變,id值不改變。(列表,字典)
- 不可變型別:value值改變,id值隨之改變。(數值型別,字串型別,布林型別,元組型別)
Python裡函式是否可以改變實參內容問題
- 若實參是可變資料型別,則可以實參內容
- 若實參是不可變資料型別,則不可以實參內容
(2)可變型別的例項
# 定義一個函式,用id()來判斷其是值傳遞,還是地址傳遞?
def test(num):
print(id(num))
num[1] = 5
print(num)
print(id(num))
list1 = [1, 2, 3]
print(id(list1))
test(list1)
print("最後的id", id(list1))
print("最後的值", list1)
(3)不可變型別的例項
# 定義一個函式,用id()來判斷其是值傳遞,還是地址傳遞?
def test(num):
print(id(num))
num = 5
print(num)
print(id(num))
number = 1
print(id(number))
test(number)
print("最後的id", id(number))
print("最後的值", number)
==6.具有返回值函式==
(1)語法說明
當我們需要函式處理過後,返回一個結果值。可以使用
return 結果值
結果值:可以是元組型別,列表型別,拆包後的資料
(2)原始碼
# 定義一個具有返回值的函式
def test(a, b):
mysum = a + b
mysub = a - b
return (a, b)
n1 = 4
n2 = 2
sum_1, sub_1 = test(n1, n2)
print(sum_1)
print(sub_1)
(3)輸出效果
==7.函式的使用說明==
(1)說明:
函式的說明都有一個標準的寫法,才能呼叫help檢視
def 函式名():
“””
功能:xxxxx
var1:
var2:
….
return xxxx
“””
檢視幫助可以用:help(函式名) ,注意是函式名,不是函式呼叫。
(2)原始碼
# 定義一個具有返回值的函式
def test(a, b=1):
"""
功能:該函式實現兩個值的加減,並返回結果。
:param a: 參與運算的一個值,數字型別,不可選,無預設值
:param b: 參與運算的另一個值,數字型別,可選,預設值為1
:return: 和與差的結果,元組型別。例如 (1, 2)
"""
mysum = a + b
mysub = a - b
return (a, b)
# 檢視幫助
help(test)