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ù)
我還沒寫完吶……