2019年9月12日 / 21,921次阅读 / Last Modified 2021年5月21日
语法
Python的赋值语句,有一种带条件判断的语法,将赋值和条件判断融为一行代码,使需要条件判断的赋值代码写起来更加简练高效,与C语言中的 ?: 语法一样。这种赋值语句中的条件判断,可以是if判断,也可以是or和and判断。
请看下面的代码示例:
>>> a = 123 if True else 321
>>> a
123
>>> a = 123 if False else 321
>>> a
321
以上代码,给变量a赋值,如果if True,a的取值就是if前面的那个值,如果if False,a的取值就是else后面的值。以上代码写的比较简单,实际情况下if判断可以写的很复杂,而且还可以嵌套:
>>> a = 1
>>> b = 2
>>> c = 2 if a==2 else 3 if b==2 else 4
>>> c
3
>>> c = 2 if a==2 else 3 if b!=2 else 4
>>> c
4
>>> c = 2 if a==1 else 3 if b!=2 else 4
>>> c
2
先看代码吧:
>>> a = 10 or 20
>>> a
10
>>> a = 10 and 20
>>> a
20
>>> b = 0 or 1
>>> b
1
>>> b = 0 and 1
>>> b
0
这种语法在python中叫“短路运算符”,属于python的布尔操作。下面总结一下赋值语句中and和or的语法规则:
其实跟条件判断是一样的,对于or,从左到右找第一个True,如果都是False,就取最后一个为False的值;对于and,从左到右找第一个False,如果都是True,就取最后一个为True的值。请看下面代码:
>>> a = 0 or False or None
>>> a
>>> type(a)
<class 'NoneType'>
>>>
>>> a = 1 and True and 'abc'
>>> a
'abc'
不建议用本文介绍的带条件判断的赋值语句,写特别复杂的语句,这种语句一旦复杂了,就失去了可读性,让人无法理解,还容易出错。
我不知道应该如何称呼,也没有看到英文,就直接上代码吧:
>>> a = (1,2)[True]
>>> a
2
>>> a = (1,2)[False]
>>> a
1
>>>
>>> x = 1
>>> a = ('abc', '123')[x == 1]
>>> a
'123'
>>> a = ('abc', '123')[x != 1]
>>> a
'abc'
>>> a = ['abc', '123'][x != 1]
>>> a
'abc'
这样的赋值,其实就是取tuple总的一个元素,用一个条件来生产出0或1,因此tuple和list都可以,True相当于1,False相当于0。
-- EOF --
本文链接:https://www.pynote.net/archives/1124
《Python带条件判断的赋值语句》有2条留言
©Copyright 麦新杰 Since 2019 Python笔记
补充一个今天看Python stdlib发现的函数调用用法:
[ ]只有and,or,not的表达式,也被称为python的布尔操作(Boolean Operation)! [ ]