多个可选参数python

Posted

技术标签:

【中文标题】多个可选参数python【英文标题】:Multiple optional arguments python 【发布时间】:2017-09-02 21:43:33 【问题描述】:

所以我有一个带有几个可选参数的函数,如下所示:

def func1(arg1, arg2, optarg1=None, optarg2=None, optarg3=None):

Optarg1 和 optarg2通常一起使用,如果指定了这 2 个参数,则不使用 optarg3。相反,如果指定了 optarg3,则不使用 optarg1 和 optarg2。如果它是一个可选参数,那么函数很容易“知道”使用哪个参数:

if optarg1 != None:
    do something
else:
    do something else 

我的问题是如何“告诉”函数在有多个可选参数并且并非总是指定所有可选参数时使用哪个可选参数?用 **kwargs 解析参数是要走的路吗?

【问题讨论】:

Function with optional arguments?的可能重复 【参考方案1】:

**kwargs 用于让 Python 函数接受任意数量的关键字参数,然后 ** 解包关键字参数字典。 Learn More here

def print_keyword_args(**kwargs):
    # kwargs is a dict of the keyword args passed to the function
    print kwargs
    if("optarg1" in kwargs and "optarg2" in kwargs):
        print "Who needs optarg3!"
        print kwargs['optarg1'], kwargs['optarg2']
    if("optarg3" in kwargs):
        print "Who needs optarg1, optarg2!!"
        print kwargs['optarg3']

print_keyword_args(optarg1="John", optarg2="Doe")
# 'optarg1': 'John', 'optarg2': 'Doe'
# Who needs optarg3!
# John Doe
print_keyword_args(optarg3="Maxwell")
# 'optarg3': 'Maxwell'
# Who needs optarg1, optarg2!!
# Maxwell
print_keyword_args(optarg1="John", optarg3="Duh!")
# 'optarg1': 'John', 'optarg3': 'Duh!'
# Who needs optarg1, optarg2!!
# Duh!

【讨论】:

这是最 Pythonic 的方式。 这里使用kwargs有什么好处?你不妨做if optarg1 is not None and optarg2 is not None... 这样函数的参数至少是清楚的。仅使用kwargs,尚不清楚它甚至期待什么论点......【参考方案2】:

如果你在函数调用中分配它们,你可以抢占你传入的参数。

def foo( a, b=None, c=None):
    print(",,".format(a,b,c))

>>> foo(4) 
4,None,None
>>> foo(4,c=5)
4,None,5

【讨论】:

以上是关于多个可选参数python的主要内容,如果未能解决你的问题,请参考以下文章

python学习笔记--函数

Laravel 4:如何传递多个可选参数

多个可选参数调用函数

SQL - 创建具有多个可选参数的存储过程

Go/可选参数中的多个构造函数?

Express中的多个可选路由参数?