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