在函数中传递等于“None”的关键字作为参数有什么意义



我正在尝试将Python Voronoi生成器转换为Java,但我对关键字参数不是很熟悉,并且我对编写为函数参数的关键字参数感到困惑。

我已经读过这个问题,但它只涉及调用参数,而不是定义它们。

似乎该功能只是将ab设置为无。我不明白为什么这是必要的。为什么不直接键入None而不是使用这样的参数?

在函数定义中使用等于 None 的关键字参数有什么意义?

该函数:

class Arc:
    p = None
    pprev = None
    pnext = None
    e = None
    s0 = None
    s1 = None
    def __init__(self, p, a=None, b=None):
        self.p = p
        self.pprev = a
        self.pnext = b
        self.e = None
        self.s0 = None
        self.s1 = None

关键字参数可以具有默认值。在这种情况下,默认值 ab None 。这意味着当这些参数未传递到函数中时,ab 设置为 None

例:

def func(a=None):
    print(a)
func()
>>>None

但是如果你做这样的事情:

def func(a):
    print(a)
func()
>>>TypeError: func() missing 1 required positional argument: 'a'
def __init__(self, p, a=None, b=None):

该行定义 __init__ 方法,您可以将其视为类的构造函数。它不是调用该方法。

在方法定义中将ab设置为等于NoneNone其默认值。这使它们在调用方法时是可选的。(因此,您可以使用 1、2 或 3 个参数调用该方法。如果不传入 ab 的值,则将使用None。在 Python 中,使用可选参数代替重载方法很常见。

这是一个称为默认值的概念。

使用此语法,调用方可以选择是为每个此类参数指定值还是使用默认值。

假设您有一个具有默认行为的方法,但您希望保留自愿更改它的可能性。这给了你这种力量。

请考虑以下示例:

def custom_method(msg, prefix=None):
  tag = prefix if prefix else ''
  print(tag + msg)

现在,作为此 API 的用户,您可以选择使用前缀,也可以避免使用前缀:

custom_method('Dude', 'Hi')
# Prints 'Hi Dude'

或:

custom_method('Dude')
# Prints 'Dude'

这是默认参数或可选参数的 Python 语法。

使用默认值声明的参数如果未在函数调用中传递,则将接收该默认值,并将接收在另一种情况下传递的内容。

这里的Arc(p)Arc(p, None, None)相同,但您可以使用:

a1 = Arc(p)
a2 = Arc(p, a1)

然后a2.pprev将被a1.

但是有一些可变默认参数的警告......小心它们或最好避免它们,直到你更精通 Python。

最新更新