用布尔表达式分配字符串[重复]
问题内容:
这个问题已经在这里有了答案 :
和/或运算符返回值[重复]
(4个答案)
3年前关闭。
我正在尝试从别人的项目中了解此代码。如果需要上下文,请访问:https
:
//github.com/newsapps/beeswithmachineguns/blob/master/beeswithmachineguns/bees.py#L501
IS_PY2
仅仅是一个布尔变量,True
如果Python的主要版本2.我知道一个非空字符串True
,但由于某些原因,我不知道openmode
将被分配'w'
或'wt'
而不是True
或False
。
openmode = IS_PY2 and 'w' or 'wt'
openkwargs = IS_PY2 and {} or {'encoding': 'utf-8', 'newline': ''}
有人可以解释一下结果吗?
问题答案:
三元布尔表达式的工作方式如下:
>>> 2 and 3 or 4
3
>>> 0 and 3 or 4
4
因此,此表达式:
openmode = IS_PY2 and 'w' or 'wt'
成为Python 2:
openmode = True and 'w' or 'wt'
相当于
openmode = 'w' or 'wt'
所以,我给w
。
在Python 3下,IS_PY2为False,给出:
openmode = False and 'w' or 'wt'
相当于
openmode = False or 'wt'
给予wt
。
所有这些都是明确地指定openmode用于文本文件,而不是二进制文件,这w
在Python2和wt
Python3中由指示。
虽然Python3t
模式是默认模式,但不必对其进行精确调整。
请参阅有关wt
mode的答案。
最后,我认为以下内容更具可读性:
openmode = 'w' if IS_PY2 else 'wt'
而这个简单得多:
openmode = 'w'