Python 或者在任务中
我正在查看其他人的代码,试图向他们学习,我对他们所做的事情有一个疑问 这是链接的第16行Python 或者在任务中,python,Python,我正在查看其他人的代码,试图向他们学习,我对他们所做的事情有一个疑问 这是链接的第16行 self.sentence = sentence or "" 赋值运算符中的或做什么 我自己也试过运行这个程序,如果定义了这个句子,那么它将被分配给self.session,否则如果没有分配,我将得到一个NameError异常 或是一个惰性运算符,返回第一个值,即'trueish'(bool(value)为True)。这个成语用来赋值,如果值是空的,则用来指别的东西 在这种情况下,它可能会防止赋值None
self.sentence = sentence or ""
赋值运算符中的或做什么
我自己也试过运行这个程序,如果定义了这个句子,那么它将被分配给self.session,否则如果没有分配,我将得到一个NameError异常
或
是一个惰性运算符,返回第一个值,即'trueish'(bool(value)为True
)。这个成语用来赋值,如果值是空的,则用来指别的东西
在这种情况下,它可能会防止赋值
None
,赋值结果为False
,但作者想确定的是,总是会赋值字符串,在这种情况下为空字符串。或
是一个惰性运算符,并返回第一个值,即'trueish'(bool(value)为True
). 这个成语用来赋值,如果值是空的,则用来指别的东西
在这种情况下,它可能会防止赋值None
,赋值结果为False
,但作者想确定的是,在这种情况下,总是会赋值字符串,并且是空字符串。在示例代码中,如果\uu init\uuuu()
有一个默认参数,这将更有意义:
class Fake:
def __init__(self, sentence=None):
self.sentence = sentence or '<empty>'
def print_me(self):
print(self.sentence)
a = Fake('A real sentence')
b = Fake()
a.print_me()
b.print_me()
产出:
paul@local:~/src/sandbox$ ./def.py
A real sentence
<empty>
paul@local:~/src/sandbox$
paul@local:~/src/sandbox$ ./def2.py
Weird output:
[1, 2]
[1, 2]
Normal output:
[1, 2]
[]
paul@local:~/src/sandbox$
在第一种情况下,您可能希望每个对象都有自己的空列表,但您可以看到,当您将内容附加到a
时,它们也会附加到b
,因为a
和b
共享同一个列表。在第二种情况下不会发生这种情况,因为我们将默认值指定为None
,而不是[]
,然后在您的问题中使用了这个成语。当列表
为无
时,列表或[]
将计算为[]
。如果不是,它将只计算到\u列表中的。这相当于:
if sentence:
self.sentence = sentence
else:
self.sentence = ""
在示例代码中,如果\uuuuu init\uuuu()
有一个默认参数,那么这将更有意义:
class Fake:
def __init__(self, sentence=None):
self.sentence = sentence or '<empty>'
def print_me(self):
print(self.sentence)
a = Fake('A real sentence')
b = Fake()
a.print_me()
b.print_me()
产出:
paul@local:~/src/sandbox$ ./def.py
A real sentence
<empty>
paul@local:~/src/sandbox$
paul@local:~/src/sandbox$ ./def2.py
Weird output:
[1, 2]
[1, 2]
Normal output:
[1, 2]
[]
paul@local:~/src/sandbox$
在第一种情况下,您可能希望每个对象都有自己的空列表,但您可以看到,当您将内容附加到a
时,它们也会附加到b
,因为a
和b
共享同一个列表。在第二种情况下不会发生这种情况,因为我们将默认值指定为None
,而不是[]
,然后在您的问题中使用了这个成语。当列表
为无
时,列表或[]
将计算为[]
。如果不是,它将只计算到\u列表中的。这相当于:
if sentence:
self.sentence = sentence
else:
self.sentence = ""
如果语句
的计算结果为false
,则它将“
分配给self.句子
。否则(如果句子
可能是一个有效的句子),则它会将self.句子
指定给句子
@ಠ_ಠ: 这似乎更像是一个答案,而不是一个注释。的第5.2节解释了“a或b”的含义。如果语句
的计算结果为假
,则它将“
赋值给self.语句
。否则(如果句子
可能是一个有效的句子),则它会将self.句子
指定给句子
@ಠ_ಠ: 这似乎更像是一个答案,而不是一个评论。的第5.2节解释了“a或b”的含义。