带有默认值的参数和关键字参数有什么区别?

11
在Python中,具有默认值的参数有什么区别:
def f(a,b,c=1,d=2): pass

和关键字参数:

def f(a=1,b=2,c=3): pass

我猜它们没有区别,但是教程有两个部分:

4.7.1. 默认参数值

4.7.2. 关键字参数

这听起来像它们之间有一些区别。如果真的有区别,为什么我不能在2.6中使用这种语法:

def pyobj_path(*objs, as_list=False): pass

?

4个回答

15

关键字参数是调用函数的方式。

f( a=1, b=2, c=3, d=4 )

默认值是指函数定义时所设定的值。


1
或者,关键字参数是实际参数,而默认值是形式参数。 - Tom Russell

11

默认参数意味着您可以省略一些参数。 您可以仅写入f(1)f(1,2)而不是f(1,2,3)

关键字参数意味着您不必按函数定义的顺序放置它们。 您可以执行f(c = 3,b = 2,a = 1)而不是f(1,2,3)


7

*args和/或**kwargs必须始终出现在函数声明的参数列表末尾(如果它们存在)。具体来说:

def <function name>(
        [<args without defaults>,]
        [<args with defaults>,]
        [*<variable length positional argument list name>,]
        [**<arbitrary keyward argument dict name>]
    ):
    <function body>

4

在使用 def 定义函数时可以设置参数的默认值。这样在调用函数时,这些参数就变成了可选的。

为最后一个参数定义默认值的函数:

def name_of_function(parameter0, parameter1, default_parameter1 = 'value')

带有默认值的参数应该只放在简单参数之后。

调用上面的函数(注:具有默认值的参数的参数值是可选的):

name_of_function(parameter0, parameter1) 

使用关键字参数调用相同的函数:

name_of_function(parameter1='value1', parameter0='value0')

关键字参数是简单的参数。在调用函数时,您可以提供参数名=值的名称-值对,而不仅仅是值。这样,您可以以任何顺序在函数调用中提供参数。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接