Python 函数调用中的条件参数

Dav*_*d G 2 python arguments if-statement coding-style python-2.7

有没有办法在 Python 中有条件地传递参数(我使用 Python 2.7)?

例如,此代码给出 2 或 3 个参数,具体取决于字典中是否存在第三个参数。

if "arg3" in my_dict:
    my_method(
        my_dict[arg1],
        my_dict[arg2],
        my_dict[arg3],
    )
else:
    my_method(
        my_dict[arg1],
        my_dict[arg2],
    )
Run Code Online (Sandbox Code Playgroud)

我认为这样写看起来是多余的。我看过一些关于 的信息argparse,我认为它看起来像这样:

import argparse

parser = argparse.ArgumentParser()
parser.add_argument(my_dict[arg1])
parser.add_argument(my_dict[arg2])
if arg3 in my_dict:
    parser.add_argument(my_dict[arg3])
args = parser.parse_args()

my_method(args)
Run Code Online (Sandbox Code Playgroud)

我也不喜欢这种方法,因为它需要导入并且难以阅读。

有没有办法做这样的事情:

my_method(
    my_dict[arg1],
    my_dict[arg2],
    my_dict[arg3] if arg3 in my_dict,
)
Run Code Online (Sandbox Code Playgroud)

或者我缺少的任何其他方式,那将是简单而干净的?

e4c*_*4c5 5

假设您的方法签名是

def my_method(arg1=None, arg2=None, arg3=None):
    print ('arg1',arg1,'arg2',arg2,'arg3',arg3)
Run Code Online (Sandbox Code Playgroud)

然后只需将所有这些 if/else 块替换为

my_method(**dictionary)
Run Code Online (Sandbox Code Playgroud)

例如

 d = {'arg3':11, 'arg2':22, 'arg1':3}
Run Code Online (Sandbox Code Playgroud)

以上将产生

arg1 3 arg2 22 arg3 11
Run Code Online (Sandbox Code Playgroud)

这种行为是由于网络**kwargs上有很多很好的教程引起的。这是来自数字海洋的一个(我没有隶属关系)