代码之家  ›  专栏  ›  技术社区  ›  LuminousNutria

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

  •  1
  • LuminousNutria  · 技术社区  · 6 年前

    我想翻译一个 Python Voronoi Generator 对于Java,但我不太熟悉关键字参数,而我被写为函数参数的关键字参数弄糊涂了。

    我读过 this question 但它只包含调用参数,而不定义它们。

    似乎功能只是设置 a b 一点也没有。我不明白为什么有必要这样做。为什么不打字呢 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
    
    4 回复  |  直到 6 年前
        1
  •  3
  •   Primusa    6 年前

    关键字参数可以具有默认值。在这种情况下,默认值为 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'
    
        2
  •  2
  •   Bill the Lizard    6 年前
    def __init__(self, p, a=None, b=None):
    

    那条线定义了 __init__ 方法,可以将其视为类的构造函数。它不调用方法。

    设置 a b 等于 None 在方法定义中 没有 它们的默认值。这使它们在调用方法时成为可选的。(因此,可以使用1、2或3个参数调用该方法。)如果不为 , 没有 将被使用。在Python中,使用可选参数代替重载方法是很常见的。

        3
  •  1
  •   Serge Ballesta    6 年前

    这是用于 违约 参数或可选参数。

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

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

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

    然后 a2.pprev a1 .

    但是有一些警告 mutable default arguments …小心使用它们,或者最好避免使用它们,直到您更精通Python为止。

        4
  •  1
  •   Daniel Trugman    6 年前

    这是一个叫做 默认值 .

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

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

    请考虑以下示例:

    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'