在定義函式的時候,有時候會遇到引數比較多或者不確定引數名的情況。這個時候就可以使用可變引數。
可變引數的形式有
*args : 元組型別引數
**kwargs :字典型別引數
args和kwargs的引數是自定義的。主要是前面的操作符不能少!
def fun(name, age):
print(name)
print(age)
if __name__ == '__main__':
fun('tom', 19)
# fun('lily') # typeerror: fun() missing 1 required positional argument: 'age'
定義了乙個fun函式,引數有name和age。當呼叫fun函式時,如果只傳乙個引數則會報typeerror的錯誤。
假設我們不光有name、age 還需要傳參性別、愛好、職業、**等引數。乙個個寫就顯得比較繁瑣。不夠pythonic。
args
這樣我們就可以通過列表型別的引數進行傳遞。
def fun_arr(name, *args):
print(name)
print(args)
if __name__ == '__main__':
fun('tom', 19)
# fun('lily') # typeerror: fun() missing 1 required positional argument: 'age'
fun_arr('tom') # 輸出 tom 、()
# tom
# (20, 'man', '籃球', 'pythoner', '17766666666')
fun_arr('tom', 20, 'man', '籃球', 'pythoner', '17766666666')
如上,引數 name 對應的是 tom。而args 則對應的是(『tom』, 20, 『man』, 『籃球』, 『pythoner』, 『17766666666』)。
kwargs
字典型別引數,例項如下
def fun_dict(**kwargs):
# 迴圈列印字典的鍵和值
# name tom
# age 18
# mobile 17766666666
for k, v in kwargs.items():
print(k, v)
# 也可通過get的方式取引數的值
# my name is tom i'am 18 years old, my phone number is 17766666666
print("my name is %s i'am %s years old, my phone number is %s"
% (kwargs.get('name'), kwargs.get('age'), kwargs.get('mobile')))
if __name__ == '__main__':
fun_dict(name='tom', age=18, mobile='17766666666')
**補充:
可變引數允許多個任意引數,也允許不傳引數。
兩個可變引數同時存在是,一定要將 *引數 放在引數 之前!!!否則編譯錯誤。
通常情況下,都是將可變引數寫在最後面。
def fun_arr(*args, name):
print(name)
print(args)
if __name__ == '__main__':
# 如下寫法 則會報錯
# typeerror: fun_arr() missing 1 required keyword-only argument: 'name'
fun_arr(20, 'man', '籃球', 'pythoner', '17766666666', 'tom')
# 正確的寫法
fun_arr(20, 'man', '籃球', 'pythoner', '17766666666', name='tome')
Go每日一題 6
以下 是否編譯通過 package main import fmt type myint1 inttype myint2 int func main 輸出結果 編譯不通過,cannot use i type int as type myint1 in assignment。myint1 和 myin...
每日一題Python
給定乙個整數陣列 nums 和乙個目標值 target,請你在該陣列中找出和為目標值的那 兩個 整數,並返回他們的陣列下標。你可以假設每種輸入只會對應乙個答案。但是,你不能重複利用這個陣列中同樣的元素。示例 給定 nums 2,7,11,15 target 9 因為 nums 0 nums 1 2 ...
每日一題 day6
基礎題 1 兩個棧實現乙個佇列 思路 棧的特點 後進先出 佇列的特點 先進先出 兩個棧可將乙個棧用於入資料,另乙個用於出資料 define crt secure no warnings include includetemplate class myqueue void pop 刪除頭部資料 s2....