我正在尝试将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
答案 0 :(得分:3)
关键字参数可以具有默认值。在这种情况下,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'
答案 1 :(得分:2)
def __init__(self, p, a=None, b=None):
该行定义了__init__
方法,您可以将其视为类的构造函数。它不是在调用方法。
在方法定义中将a
和b
设置为等于None
会使None
成为默认值。这使它们在您调用该方法时是可选的。 (因此,您可以使用1、2或3个参数来调用该方法。)如果未传递a
和b
的值,则将使用None
。在Python中,通常使用可选参数代替重载方法。
答案 2 :(得分:1)
这是默认参数或可选参数的Python语法。
使用默认值声明的参数,如果未在函数调用中传递则将接收该默认值,而在其他情况下将接收传递的值。
Arc(p)
与Arc(p, None, None)
相同,但是您可以使用:
a1 = Arc(p)
a2 = Arc(p, a1)
,然后a2.pprev
将是a1
。
但是mutable default arguments有一些警告……要小心一些,或者最好避免使用它们,直到您精通Python。
答案 3 :(得分:1)
这是一个称为默认值的概念。
使用此语法,调用者可以选择是为每个这样的参数指定一个值,还是使用默认值。
假设您有一个具有默认行为的方法,但是您想保留随意更改它的可能性。这会赋予您这种力量。
考虑以下示例:
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'