繁体   English   中英

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

[英]What is the point of passing keywords equal to `None` as parameters in a function?

我正在尝试将Python Voronoi Generator转换为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设置为None会使None成为默认值。 当您调用该方法时,这使它们成为可选的。 (因此,您可以使用1、2或3参数调用该方法。)如果不传递ab值,则将不使用None值。 在Python中常见的是使用可选参数代替重载方法。

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

使用默认值声明的参数,如果未在函数调用中传递则将接收该默认值,而在其他情况下将接收传递的值。

在这里, Arc(p)Arc(p, None, None) ,但是您可以使用:

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

然后a2.pprev将是a1

但是有一些需要注意的问题,它们带有可变的默认参数 ……请谨慎使用它们,或者最好避免使用它们,直到您精通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'

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM