Python 3 筆記 - 第8章 函數(shù)

1. 函數(shù)定義

Python 函數(shù)定義格式為:

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

2. 參數(shù)傳遞

之前在學(xué)習(xí) C 或 Java 時,一個繞來繞去的知識點就是關(guān)于函數(shù)入?yún)?,傳遞的究竟是數(shù)值,還是對象引用。在 Python 中,其實也有這個概念,只不過可以換一種表達方式:

可更改對象 (mutable) && 不可更改對象 (immutable)

數(shù)值類型(number)、字符串類型(string)和元組類型(tuple)都是不可更改的對象;列表類型(list)和字典類型(dictionary)則是可更改的對象。

  • 比如對于數(shù)值類型的變量
a = 1
a = 2

這個過程本質(zhì)上是先生成一個數(shù)值對象1,將 a 指向該對象,然后再生成一個數(shù)值對象2,讓 a 重新指向該對象,原來那個數(shù)值對象1也不再使用了,因此這個過程并不是改變了 a。

  • 比如對于列表類型的變量
list = [1,2,3,4,5]
list[2] = 10

這個過程本質(zhì)上是改變了 list 所代表的列表對象內(nèi)部的值

寫一個簡單的例子:

# 這個函數(shù)的入?yún)⑹遣豢勺儗ο?-數(shù)值
def change_number(x) :
    x = 100

# 這個函數(shù)的入?yún)⑹强勺儗ο?-列表
def change_list(list) :
    list.append(12345)

# 主程序
x = 1
print('Before invoke change_number x =', x)
change_number(x)
print('After invoke change_number x =', x)

list = [1,2,3]
print('Before invoke change_list list =', list)
change_list(list)
print('After invoke change_list list =', list)

執(zhí)行結(jié)果為:

Before invoke change_number x = 1
After invoke change_number x = 1
Before invoke change_list list = [1, 2, 3]
After invoke change_list list = [1, 2, 3, 12345]

3. 傳遞參數(shù)的表達方法

有四種傳遞參數(shù)的表達方法:

  • 必需參數(shù)
  • 關(guān)鍵字參數(shù)
  • 默認參數(shù)
  • 不定長參數(shù)

1) 必須參數(shù)

必需參數(shù)指的是必須以正確的順序傳入函數(shù),參數(shù)個數(shù)必須和聲明時的一樣,否則會出現(xiàn)運行錯誤。這是最常見的方式,不再贅述。

2) 關(guān)鍵字參數(shù)

使用關(guān)鍵字參數(shù)允許函數(shù)調(diào)用時參數(shù)的順序與聲明時不一致,因為 Python 解釋器能夠用參數(shù)名匹配參數(shù)值

def user(name, age) :
    print('name :', name)
    print('age : ', age)

print('入?yún)㈨樞蚝秃瘮?shù)聲明一致')
user(name = 'andy', age = 35)

print('入?yún)㈨樞蚝秃瘮?shù)聲明不一致')
user(age = 35, name = 'andy')

執(zhí)行結(jié)果為

入?yún)㈨樞蚝秃瘮?shù)聲明一致
name : andy
age :  35

入?yún)㈨樞蚝秃瘮?shù)聲明不一致
name : andy
age :  35

3) 默認參數(shù)

調(diào)用函數(shù)時,如果沒有傳遞參數(shù),則會使用默認參數(shù)

def user(name = '無名氏', age = 100) :
    print('name :', name)
    print('age : ', age)

print('兩個參數(shù)都顯示設(shè)定')
user(name = 'andy', age = 35)

print('只顯示設(shè)定名字')
user(name = 'andy')

print('只顯示設(shè)定年齡')
user(age = 35)

執(zhí)行結(jié)果為:

兩個參數(shù)都顯示設(shè)定
name : andy
age :  35

只顯示設(shè)定名字
name : andy
age :  100

只顯示設(shè)定年齡
name : 無名氏
age :  35

4) 不定長參數(shù)

我還沒寫完吶……

?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時請結(jié)合常識與多方信息審慎甄別。
平臺聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點,簡書系信息發(fā)布平臺,僅提供信息存儲服務(wù)。

相關(guān)閱讀更多精彩內(nèi)容

友情鏈接更多精彩內(nèi)容