我想自动化/简化这个:
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))
现在,如果未设置 tag 参数,消息会告诉您。如果没有此代码,您获得的唯一信息是带有缺失键名称的 KeyError。
您可以使用locals()
传递局部变量的字典:
def test(stream, tag):
subprocess.call('git submodule checkout {stream}-{tag}'.format(**locals()))