簡體   English   中英

如何使用** kwargs自動填寫格式參數

[英]How to use **kwargs to fill in format parameters automatically

我想自動化/簡化:

def test(stream, tag):
    subprocess.call('git submodule checkout {stream}-{tag}'.format(stream=stream, tag=tag))

即我想擺脫stream = stream和tag = tag,並以某種方式利用** kwargs之類的東西。 這可能嗎?

我的2美分:請不要濫用**kwargs ,只有在先驗未知參數數量的情況下才應使用它。

以下是一些不涉及**kwargs

簡單

如果您關心的是行長,則可以使用隱式順序來節省空間:

def test(stream, tag):
    subprocess.call('git submodule checkout {}-{}'.format(stream, tag))

這是以格式字符串可讀性為代價的,但是對於單行代碼而言,它可能只是這樣做。

對象樣式

將參數包裝在Checkout對象中:

class Checkout:
    def __init__(self, stream, tag):
        self.stream = stream
        self.tag = tag

#...

def test(checkout):
    subprocess.call('git submodule checkout {0.stream}-{0.tag}'.format(checkout))

甚至:

class Checkout:
    def __init__(self, stream, tag):
        self.stream = stream
        self.tag = tag

    def test(self):
        subprocess.call('git submodule checkout {0.stream}-{0.tag}'.format(self))

這很冗長,但是Checkout對象不僅僅是一個簡單的包裝器,它可能在其他地方重用或序列化。

這應該工作:

def test(**kwargs):
    subprocess.call("git submodule checkout {stream}-{tag}".format(**kwargs))

現在,您可以添加一些默認值,或者引發更清晰的錯誤消息。

def test(**kwargs):
    #set a default value for "stream"
    if "stream" not in kwargs:
        kwargs["stream"] = "mystream"
    if "tag" not in kwargs:
        raise ValueError("Please add some tags")
    subprocess.call("git submodule checkout {stream}-{tag}".format(**kwargs))

現在,當未設置tag參數時,消息將告訴您。 沒有此代碼,您獲得的唯一信息就是KeyError以及丟失的鍵的名稱。

您可以使用locals()傳遞局部變量的字典:

def test(stream, tag):
    subprocess.call('git submodule checkout {stream}-{tag}'.format(**locals()))

暫無
暫無

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

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