Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/355.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 或者在任务中_Python - Fatal编程技术网

Python 或者在任务中

Python 或者在任务中,python,Python,我正在查看其他人的代码,试图向他们学习,我对他们所做的事情有一个疑问 这是链接的第16行 self.sentence = sentence or "" 赋值运算符中的或做什么 我自己也试过运行这个程序,如果定义了这个句子,那么它将被分配给self.session,否则如果没有分配,我将得到一个NameError异常 或是一个惰性运算符,返回第一个值,即'trueish'(bool(value)为True)。这个成语用来赋值,如果值是空的,则用来指别的东西 在这种情况下,它可能会防止赋值None

我正在查看其他人的代码,试图向他们学习,我对他们所做的事情有一个疑问

这是链接的第16行

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”的含义。