(四)函數(shù)實參傳遞的方式
1、位置參數(shù)
位置參數(shù):調(diào)用函數(shù)時根據(jù)函數(shù)定義的參數(shù)位置來傳遞參數(shù)。
def user_info(name, age, gender):
print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}')
user_info('TOM', 20, '男')
注意:傳遞和定義參數(shù)的順序及個數(shù)必須一致。就是將對應(yīng)位置的實參復(fù)制給對應(yīng)位置的形參,第一個實參賦值給第一個形參,第二個實參賦值給第二個形參,以此類推。
示例
def user_info(name, age, gender):
print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}')
# 1.調(diào)用函數(shù),傳遞的參數(shù)個數(shù)不正確
# 結(jié)果:TypeError: user_info() missing 1 required positional argument: 'gender'
user_info('TOM', 20)
# 2.調(diào)用函數(shù),傳遞的參數(shù)的順序不正確
# 不會報錯,但輸出的內(nèi)容完全歧義。
# 結(jié)果:您的名字是男, 年齡是TOM, 性別是20
user_info('男', 'TOM', 20)
2、關(guān)鍵字參數(shù)
可以不按照形參定義的順序去傳遞,而直接根據(jù)參數(shù)名去傳遞參數(shù)。
函數(shù)調(diào)用,通過鍵=值形式加以指定??梢宰尯瘮?shù)更加清晰、容易使用,同時也清除了參數(shù)的需求。
def user_info(name, age, gender):
print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}')
# 正確用法
user_info('Rose', age=20, gender='女')
user_info('小明', gender='男', age=16)
# 位置參數(shù)必須寫在關(guān)鍵字參數(shù)的前面
# 結(jié)果:SyntaxError: positional argument follows keyword argument
user_info(gender='男', age=16, "孫悟空")
# 位置參數(shù)必須寫在關(guān)鍵字參數(shù)的前面,同時位置參數(shù)的順序也要對應(yīng)
# 結(jié)果:TypeError: user_info() got multiple values for argument 'age'
user_info("孫悟空", '男', age=16)
# 格式正確,但是位置參數(shù)的順序不正確,結(jié)果也會產(chǎn)生歧義。
# 結(jié)果:您的名字是20, 年齡是孫悟空, 性別是男
user_info(20, "孫悟空", gender='男')
"""
總結(jié):定義參數(shù)時,位置參數(shù)和關(guān)鍵字參數(shù),盡量統(tǒng)一使用一種。
"""
注意:
- 位置參數(shù)和關(guān)鍵字參數(shù)可以混合使用。
- 函數(shù)調(diào)用時,如果有位置參數(shù)時,位置參數(shù)必須在關(guān)鍵字參數(shù)的前面,但關(guān)鍵字參數(shù)之間不存在先后順序。
3、缺省參數(shù)(默認(rèn)參數(shù))
缺省參數(shù)也叫默認(rèn)參數(shù),用于定義函數(shù)時,為參數(shù)提供默認(rèn)值,調(diào)用函數(shù)時可不傳該默認(rèn)參數(shù)的值。
提示:所有位置參數(shù)必須出現(xiàn)在默認(rèn)參數(shù)前(因為默認(rèn)參數(shù)的格式和關(guān)鍵字參數(shù)格式一樣,所以都要寫在所有參數(shù)之后),包括函數(shù)定義和調(diào)用。
def user_info(name, age, gender='男'):
print(f'您的名字是{name}, 年齡是{age}, 性別是{gender}')
# 沒有為缺省參數(shù)傳值,表示使用默認(rèn)值。
user_info('TOM', 20)
# 為缺省參數(shù)傳值,使用這個值,即修改了默認(rèn)值。
user_info('Rose', 18, '女')
注意:函數(shù)調(diào)用時,如果為缺省參數(shù)傳值則修改默認(rèn)參數(shù)值,否則使用這個默認(rèn)值。