python知识:*args 和**kwargs
1. *args 和 **kwargs
????????多數新的 Python 程序員都很難弄清楚 *args 和 **kwargs 魔術變量。那么它們是什么?首先讓我告訴你,沒有必要寫 *args 或 **kwargs。只有 *(星號)是必需的。您也可以編寫 *var 和 **vars。編寫 *args 和 **kwargs 只是一種約定。所以現在讓我們先看看 *args。
2? 應用 *args參數
????????*args 和 **kwargs 主要用于函數定義。 *args 和 **kwargs 允許您將可變數量的參數傳遞給函數。變量在這里的含義是您事先不知道用戶可以將多少個參數傳遞給您的函數,因此在這種情況下您使用這兩個關鍵字。 *args 用于向函數發送非關鍵字可變長度參數列表。這是一個示例,可幫助您獲得清晰的概念:
def?test_var_args(f_arg, *argv):
????print("first normal arg:", f_arg)
????for?arg in?argv:
????????print("another arg through *argv:", arg)
test_var_args('yasoob', 'python', 'eggs', 'test')
這會產生以下結果:
first normal arg: yasoob
another arg through *argv: python
another arg through *argv: eggs
another arg through *argv: test
我希望這可以消除您的任何困惑。所以現在讓我們談談 **kwargs
3 用 **kwargs參數
????????**kwargs 允許您將關鍵字可變長度的參數傳遞給函數。如果你想在函數中處理命名參數,你應該使用 **kwargs。這是一個讓您繼續使用它的示例:
def?greet_me(**kwargs):
????for?key, value in?kwargs.items():
????????print("{0}?= {1}".format(key, value))
>>>?greet_me(name="yasoob")
name =?yasoob
????????因此,您可以看到我們如何在函數中處理關鍵字參數列表。這只是 **kwargs 的基礎知識,您可以看到它有多么有用。現在讓我們談談如何使用 *args 和 **kwargs 調用帶有參數列表或字典的函數。
4 用 *args 和 **kwargs 做函數形參
????????所以在這里我們將看到如何使用 *args 和 **kwargs 調用函數。只要考慮你有這個小功能:
def?test_args_kwargs(arg1, arg2, arg3):
????print("arg1:", arg1)
????print("arg2:", arg2)
????print("arg3:", arg3)
????????現在您可以使用 *args 或 **kwargs 將參數傳遞給這個小函數。這是如何做到的:
# first with *args
>>>?args =?("two", 3, 5)
>>>?test_args_kwargs(*args)
arg1: two
arg2: 3
arg3: 5
# now with **kwargs:
>>>?kwargs =?{"arg3": 3, "arg2": "two", "arg1": 5}
>>>?test_args_kwargs(**kwargs)
arg1: 5
arg2: two
arg3: 3
5 使用 *args **kwargs 和正式 args 的順序
所以如果你想在函數中使用所有這三個,那么順序是
some_func(fargs, *args, **kwargs)
6 應用時機
????????這真的取決于你的要求是什么。最常見的用例是制作函數裝飾器(在另一章中討論)。此外,它也可以用于猴子修補。猴子補丁意味著在運行時修改一些代碼。假設您有一個帶有名為 get_info 的函數的類,該函數調用 API 并返回響應數據。如果我們想測試它,我們可以用一些測試數據替換 API 調用。例如:
import?someclass
def?get_info(self, *args):
????return?"Test data"
someclass.get_info =?get_info
我相信您也可以想到其他一些用例。
猴子補丁:是程序在本地擴展或修改支持系統軟件的一種方式(僅影響程序的運行實例),可以理解為動態補丁。
總結
以上是生活随笔為你收集整理的python知识:*args 和**kwargs的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: python语言:装饰器原理
- 下一篇: python知识:numpy的维度之变