【问题标题】:Name of and reason for Python function parameters of type `name=value``name=value` 类型的 Python 函数参数的名称和原因
【发布时间】:2016-07-06 12:20:55
【问题描述】:

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

我是 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)

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

如果没有别的,谁能告诉我这叫什么?

【问题讨论】:

  • 它们被称为关键字参数。
  • 我建议你阅读 Python 教程; this and many other things are explained there
  • @AnttiHaapala:不错的主意。我一直在努力,但必要时零敲碎打
  • 我是否应该调整帖子的标题以包含“关键字参数”以供未来可能有相同问题的用户使用?
  • @marcman 使用准确的术语只会帮助已经知道他们被称为什么的用户,在这种情况下,他们可以查找文档。我确实建议尝试使其更具描述性,因为它目前非常通用。

标签: python function parameter-passing


【解决方案1】:

这些是关键字参数。

some_function(x=y, z=zz) 

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

使用关键字参数的原因:

  • 您可以按任何顺序给它们,而不仅仅是函数定义中的顺序
  • 以后回看代码时,如果参数有好听的名字,就可以立即说出传递变量的用途,而不需要查看函数定义或文档来了解数据的含义。

【讨论】:

    【解决方案2】:

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

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

    【讨论】:

      【解决方案3】:

      在 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)

      【讨论】:

      • Python 文档调用这些 keyword 参数,而不是命名参数。
      • 我发誓另一种语言使用“命名”一词。我认为这就是混乱的来源。
      • @MartijnPieters:谢谢,我更正了我的答案。值得一提的是,“命名参数”是 Dive Into Python 使用的术语:diveintopython.net/power_of_introspection/…
      • @Carcigenicate 你可以使用谷歌来检查文档是否非常准确;虽然有十几次提到的“命名参数”,但其中只有几个适用于函数,然后就是def foo(bar)中括号中的那个。
      猜你喜欢
      • 1970-01-01
      • 2020-05-28
      • 1970-01-01
      相关资源
      最近更新 更多