これを自動化/単純化したい:
def test(stream, tag):
subprocess.call('git submodule checkout {stream}-{tag}'.format(stream=stream, tag=tag))
つまり、stream=stream と tag=tag を取り除き、何とか **kwargs のようなものを利用したいと考えています。これは可能ですか?
これを自動化/単純化したい:
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))
これで、タグ引数が設定されていない場合、メッセージでその旨が通知されます。このコードがなければ、得られる唯一の情報は、不足しているキーの名前を持つ KeyError です。
locals()
ローカル変数の辞書を渡すために使用できます。
def test(stream, tag):
subprocess.call('git submodule checkout {stream}-{tag}'.format(**locals()))