每日一題 6 Python中的可變引數

2021-09-26 11:11:16 字數 2154 閱讀 4718

在定義函式的時候,有時候會遇到引數比較多或者不確定引數名的情況。這個時候就可以使用可變引數。

可變引數的形式有

*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....