“name = value”类型的Python函数参数的名称和原因

时间:2016-03-19 20:03:13

标签: python function parameter-passing

完全有可能这个问题是重复的,但我不知道这个概念叫什么,所以我甚至不知道如何搜索它。

我是Python的新手并尝试从Caffe example了解此功能:

def conv_relu(bottom, ks, nout, stride=1, pad=0, group=1):
    conv = L.Convolution(bottom, kernel_size=ks, stride=stride,
                                num_output=nout, pad=pad, group=group)
    return conv, L.ReLU(conv, in_place=True)

我认为stride=1函数定义中的参数pad=1conv_relu等是默认的初始值,但是kernel_size=ksstride=stride是什么, L.Convolution调用意味着什么?它有点像名字/价值对吗?

如果不出意外,有人可以告诉我这叫什么吗?

3 个答案:

答案 0 :(得分:6)

这些是关键字参数。

some_function(x=y, z=zz) 

x是声明函数时参数的名称,y是传入的值。

使用关键字参数的原因:

  • 您可以按任何顺序给出它们,而不仅仅是功能定义中的顺序
  • 当您稍后回顾代码时,如果参数具有良好的名称,您可以立即告知传递的变量的目的,而不是需要检查函数定义或文档以查看数据的含义。

答案 1 :(得分:5)

您使用关键字参数 call expression。每个name=value对为函数接受的特定参数赋值。

关键字参数可以按任何顺序使用。如果函数签名中的命名参数具有默认值,则调用中的值将覆盖该默认值。如果省略特定参数,则使用默认值。

答案 2 :(得分:4)

在Python中,可以通过位置或关键字提供参数。

例如,假设您具有以下功能:

def foo(bar, baz=1, qux=2):
    pass

您可以将其称为foo(3),因此在被调用者范围内,bar将为3bazqux将分别分配默认值 - 12 - 因此您无需明确提供这些值。

您也可以使用关键字参数(即您要搜索的字词)来调用此函数。与bar作为命名参数的完全相同的调用将是foo(bar=3)

当然,我们宁愿只使用foo(3),因为它更简洁,除非有特定的理由使用命名参数。这种情况的一个例子是,如果我们希望为qux提供非默认参数,同时保持baz的默认参数不变:foo(3, qux=4)