Python:为方法调用添加可选参数的更优雅方式

Ste*_*veJ 2 python optional-parameters keyword-argument python-3.x

这可能看起来微不足道,但这是我经常遇到的一个条件,并希望找到一种更优雅的方式来编写这段代码.该方法虽然与问题不是非常相关,但它采用文本值和可选的is_checked值来创建单选按钮(使用dominate).在这种情况下,我不能将'checked'设置为None,或者设置为false - 它必须存在或不存在.看起来我不应该两次写'输入'行,只是为了可选地添加一个参数.

def _get_radio_button(text: str, is_checked=False):

    with label(text, cls="radio-inline") as lbl:
        if is_checked:
            input(text, type="radio", name="optradio", checked='checked')
        else:
            input(text, type="radio", name="optradio")

    return lbl
Run Code Online (Sandbox Code Playgroud)

这将是我的第二种方法,但它是相同的代码行,而且可读性较差 - 尽管可能更多一些干.

a = dict(type='radio', name='optradio')
if is_checked: 
    a['checked']='checked'
with label(text, cls="radio-inline") as lbl:
    input(text, **a)
Run Code Online (Sandbox Code Playgroud)

问题:如何在不牺牲可读性的情况下以最少的行处理此代码案例?

use*_*342 5

你的代码看起来很好,除了明显的命名a,可能是input_opts或类似的.

使其更清晰的另一种可能性是使用直接关键字参数来处理常见的东西,然后使用注入可选的参数**.当只有一个是可选的时,这可能很短,例如:

checked_arg = {'checked': 'checked'} if is_checked else {}
with label(text, cls="radio-inline") as lbl:
    input(text, type="radio", name="optradio", **checked_arg)
Run Code Online (Sandbox Code Playgroud)

  • 我看到你在那里做了什么 - 我喜欢它.我怀疑这会得到答案,但想要给它一点,所以看看是否有其他东西弹出.感谢您抽出宝贵时间作出回应. (2认同)