【问题标题】:Python Function Called with Default Argument Different From No Argument使用不同于无参数的默认参数调用的 Python 函数
【发布时间】:2016-02-12 12:07:35
【问题描述】:

假设我有一个带有两个参数的函数,xy。如果没有给出y,那么我将根据x 创建一个默认值。当然,我不能用def myfunc(x, y=x+1) 定义函数,因为默认值将在函数的定义 处进行评估,而不是在调用时进行评估。因此,我将使用def myfunc(x, y=None) 定义函数,并在我的函数体中检查y 是否为None,如果是,则将y 重新定义为x + 1。如果y 有可能是任何东西,会怎样?如果None 是一个可能的值呢?即使y 的默认值是None,有没有一种方法可以区分myfunc(4)myfunc(4, None)

【问题讨论】:

  • 你的函数不可能处理“任何东西”,所以将默认值设置为永远不会被传递或者你知道你不会处理的东西。
  • @FredrikRosenqvist 如果它是一种新的序列呢?
  • 序列是什么意思?举个例子
  • @FredrikRosenqvist 我的意思是 sequence,例如列表、字符串或元组。
  • 是的,列表、字符串或元组不是无?没看出有问题,可以用“if type(y) is list”检查类型

标签: python arguments parameter-passing default-arguments


【解决方案1】:

如果你真的需要知道它没有设置,这就是方法:

NOT_SET = object()
def f(x, y=NOT_SET):
    if y is NOT_SET:
        # y is not set

之所以有效,是因为:

>>> a = object()
>>> b = object()
>>> a is b
False

【讨论】:

  • 使用if y is NOT_SET: 会更好,这会检查对象身份而不是相等性。
猜你喜欢
  • 2017-10-23
  • 2014-03-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-06-14
  • 2013-06-28
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多