Skip to main content
 首页 » 编程设计

python之如何在同一函数调用中使用可选命名参数和 *mulit_vars

2025年05月04日11www_RR

假设你有这样一个函数:

def example(var1=None,var2=None,var3=None,*multi_values): 
    print (var1,var2,var3,*multi_values) 

你能绕过调用所有可选参数并只向最后一个参数添加内容吗?

例子:

>>> multi=range(3) 
>>> example(???) 
(None,"hi",None,(1,2,3)) 

我不想这样做:

>>> multi=range(3) 
>>> example(None,None,None,*multi) #bad -> this doesn't use the default values 

请您参考如下方法:

一个选择是更改原型(prototype)以将可迭代对象作为 multi_values 参数,而不是接受任意数量的参数:

def example(var1=None, var2=None, var3=None, multi_values=None): 
    if multi_values is None: 
        multi_values = [] 
    # whatever 

然后你就可以调用这个函数了

example(multi_values=multi) 

另一种选择是只接受 var1 到 var3 作为关键字参数:

def example(*multi_values, **kwargs): 
    var1 = kwargs.pop("var1", None) 
    var2 = kwargs.pop("var2", None) 
    var3 = kwargs.pop("var3", None) 
    if kwargs: 
        raise TypeError("Unknown keyword arguments") 
    # whatever 

在 Python 3.x 中,这是通过添加 var1 到 var3 *multi_values 参数来支持的:

def example(*multi_values, var1=None, var2=None, var3=None): 
    # whatever 

这与前面的示例基本相同,具有更好的内省(introspection)的额外优势。