在函数中传递等于“None”的关键字作为参数有什么意义?
What is the point of passing keywords equal to `None` as parameters in a function?
我正在尝试将 Python Voronoi Generator 翻译成 Java,但我对关键字参数不是很熟悉,而且我对作为函数参数编写的关键字参数感到困惑。
我读过 this question,但它只涵盖调用参数,而不是定义它们。
似乎函数只是将 a
和 b
设置为 None。我不明白为什么这是必要的。为什么不直接键入 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
关键字参数可以有默认值。在这种情况下,a
和 b
的默认值是 None
。这意味着当这些参数未传递到函数中时,a
和 b
将设置为 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__
方法,您可以将其视为 class 的构造函数。它没有调用方法。
在方法定义中将 a
和 b
设置为等于 None
使 None
成为它们的默认值。这使得它们在您调用该方法时是可选的。 (因此您可以使用 1、2 或 3 个参数调用该方法。)如果您不为 a
和 b
传递值,将使用 None
。在 Python 中使用可选参数代替重载方法很常见。
这是默认参数或可选参数的Python语法。
使用默认值声明的参数,如果它们未在函数调用中传递,将接收默认值,否则将接收在其他情况下传递的值。
此处Arc(p)
与Arc(p, None, None)
相同,但您可以使用:
a1 = Arc(p)
a2 = Arc(p, a1)
然后 a2.pprev
将是 a1
。
但是 mutable default arguments 有一些注意事项...在您更精通 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 Voronoi Generator 翻译成 Java,但我对关键字参数不是很熟悉,而且我对作为函数参数编写的关键字参数感到困惑。
我读过 this question,但它只涵盖调用参数,而不是定义它们。
似乎函数只是将 a
和 b
设置为 None。我不明白为什么这是必要的。为什么不直接键入 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
关键字参数可以有默认值。在这种情况下,a
和 b
的默认值是 None
。这意味着当这些参数未传递到函数中时,a
和 b
将设置为 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__
方法,您可以将其视为 class 的构造函数。它没有调用方法。
在方法定义中将 a
和 b
设置为等于 None
使 None
成为它们的默认值。这使得它们在您调用该方法时是可选的。 (因此您可以使用 1、2 或 3 个参数调用该方法。)如果您不为 a
和 b
传递值,将使用 None
。在 Python 中使用可选参数代替重载方法很常见。
这是默认参数或可选参数的Python语法。
使用默认值声明的参数,如果它们未在函数调用中传递,将接收默认值,否则将接收在其他情况下传递的值。
此处Arc(p)
与Arc(p, None, None)
相同,但您可以使用:
a1 = Arc(p)
a2 = Arc(p, a1)
然后 a2.pprev
将是 a1
。
但是 mutable default arguments 有一些注意事项...在您更精通 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'