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

Python 在函数中传递等于'None'的关键字作为参数有什么意义?,python,null,keyword,nonetype,Python,Null,Keyword,Nonetype,我正在尝试将a转换为Java,但我对关键字参数不是很熟悉,并且对作为函数参数编写的关键字参数感到困惑 我读过,但它只涉及调用参数,而不是定义参数 该函数似乎只是将a和b设置为无。我不明白为什么那是必要的。为什么不直接键入None,而不使用这样的参数呢 在函数定义中使用等于None的关键字参数有什么意义 功能: class Arc: p = None pprev = None pnext = None e = None s0 = None s1 =

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

我读过,但它只涉及调用参数,而不是定义参数

该函数似乎只是将
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

关键字参数可以有一个默认值。在这种情况下,
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'

关键字参数可以有一个默认值。在这种情况下,
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'
这一行定义了
\uuuu init\uuu
方法,您可以将其视为类的构造函数。它没有调用方法

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

这一行定义了
\uuuu init\uuu
方法,您可以将其视为类的构造函数。它没有调用方法


在方法定义中将
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


但是有一些关于。。。小心使用它们,或者最好在您精通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'
或:


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

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

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

考虑以下示例:

def custom_method(msg, prefix=None):
  tag = prefix if prefix else ''
  print(tag + msg)
现在,作为此API的用户,您可以选择使用前缀,也可以避免使用前缀:

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


我懂了!谢谢,这很有帮助!没问题,我很乐意帮忙:)我明白了!谢谢,这很有帮助!没问题,我很乐意提供帮助:)不要创建很多类变量(即静态变量),只是为了立即将它们隐藏在
\uuuu init\uuuu
@juanpa.arrivillaga中,这不是我的代码。@LuminousNutria仅供参考:类成员不需要用Python声明(它们可以在
\uuu插槽中,但大部分不是)。顶部的行(例如,
p=None
)有点反模式,表示不懂该语言的人。您指向的回购协议链接到一个看起来更idiomatic@SamMason这正是我的观点。理解这一点很重要,不仅成员不需要声明,Python中也没有变量声明,正如您所说的,看到上面的代码看起来像是有人在用Java/C++编写代码Python@juanpa.arrivillaga哦,我明白了。谢谢我觉得这看起来也很奇怪。不要创建很多类变量(即静态变量)只是为了立即将它们隐藏在
\uuuu init\uuuu
@juanpa.arrivillaga中,这不是我的代码。@LuminousNutria仅供参考:类成员不需要在Python中声明(它们可以在
\uu slots\uuu
中,但大部分不是)。顶部的行(例如,
p=None
)有点反模式,表示不懂该语言的人。您指向的回购协议链接到一个看起来更idiomatic@SamMason