Python 在函数中传递等于'None'的关键字作为参数有什么意义?
我正在尝试将a转换为Java,但我对关键字参数不是很熟悉,并且对作为函数参数编写的关键字参数感到困惑 我读过,但它只涉及调用参数,而不是定义参数 该函数似乎只是将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
和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