簡體   English   中英

Python 檢查參數是否由 position 或關鍵字傳入

[英]Python check if an argument was passed in by position or by keyword

檢查參數是否由 position 或關鍵字傳入的更簡潔的方法是什么?

在某些情況下,我正在克隆和覆蓋函數。 被覆蓋函數的簽名可能會隨着時間的推移而增長,所以我想要一些我以后不必更改的東西,我可以用它來提取我關心的幾個參數並忽略所有 rest。

例如,function 調用可能如下所示:

foo("bar", "baz")
foo(arg1="bar", arg2="baz")

兩者都是有效的。 如果我使用argskwargs來捕獲所有參數,我必須弄清楚它最終出現在哪個參數中。到目前為止,我正在這樣做:

def foo(*args, **kwargs): 
    arg1 = kwargs["arg1"] if "arg1" in kwargs else args[0]
    arg2 = kwargs["arg2"] if "arg2" in kwargs else args[1]

我覺得必須有一種更清潔的方法來做到這一點。

你可以這樣做:

def foo(*args, **kwargs):
    argnames = ["arg1", "arg2"]

    argdict = dict(zip(argnames, args))
    argdict.update(kwargs)

    print(argdict)


foo("bar", "baz")
foo(arg1="bar", arg2="baz")

兩者都給出相同的:

{'arg1': 'bar', 'arg2': 'baz'}
{'arg1': 'bar', 'arg2': 'baz'}

然后,如果您確實需要,可以執行arg1 = argdict["arg1"]等,但您也可以只使用字典而不是提取到命名變量中。

(這里使用字符串常量"bar""baz" ,而不是barbaz ,為了一個獨立的例子,但它不依賴於它們是字符串。)

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM