3.1 表达式概述
3.1.1 认识表达式
表达式就是计算的式子,由运算符和操作数组成。表达式必须返回一个值。操作数是参与运算的对象,包括字面值、变量、对象、表达式等。
使用运算符把多个简单的表达式连接在一起,构成一个复杂的表达式。复杂的表达式还可以嵌套组成更复杂的表达式。但是,不管表达式的形式怎么复杂,最后都要求返回一个值。
简单的表达式可以是一个字面值或变量。例如:
"python" # 字符串,返回字符串 python n # 变量,返回变量的值
Python在解析复杂的表达式时,先计算最小单元的表达式,然后把返回值投入到外围表达式(上一层表达式)的运算,依次逐级上移。
Python表达式严格遵循从左到右的顺序执行运算,但是也会受到每个运算符的优先级和结合性的影响。为了控制计算,可以使用小括号进行分组,以便提升子表达式的优先级。例如:
(3-2-1)*(1+2+3)/(2*3*4) # 提升子表达式的优先级
通过分组,表达式也更容易阅读。例如:
(a + b > c and a - b < c or a > b > c) # 未分组 ((a + b > c) and ((a - b < c) or (a > b > c))) # 分组
3.1.2 认识运算符
运算符表示特定算法的符号,大部分由标点符号表示(如+、-、=等),少数运算符由单词表示(如in、is、and、or和not等)。运算符必须与操作数配合使用,组成表达式,才能够发挥作用。根据操作数的数量,运算符可以分为3种类型。
➢ 一元运算符:只有1个操作数,如按位取反~、逻辑非not、一元减号-。
➢ 二元运算符:有2个操作数,大部分都是二元运算符,需要结合2个操作数。
➢ 三元运算符:有3个操作数,如条件表达式。
Python运算符列表说明如表3.1所示。表中运算符根据优先级从高到低向下排列,同一行内运算符等级相同。当运算符的优先级相同时,再根据结合性决定先执行哪个运算符。如果结合性再相同,则最后根据先后顺序决定运算优先级。
表3.1 Python运算符优先级和结合性
优先级就是当多个运算符同时出现在一个表达式中时,先执行哪个运算符。例如,对于表达式4+4*2,Python先计算乘法,再计算加法,说明*的优先级高于+,而在表达式4+4<<2中,+的优先级高于<<,先执行4+4,再执行8<<2。
提示:在表达式中可以使用( )改变运算顺序,例如,4+(4<<2),则先执行4<<2,再执行4+16。
注意:把表达式设计得简单,对于复杂的表达式,可以尝试拆分编写。不要过度依赖运算符的优先级来控制表达式的执行顺序,这样可读性较差,应尽量使用( )来控制表达式的执行顺序。
结合性就是当一个表达式中出现多个优先级相同的运算符时,先执行哪个运算符。先执行左边的叫左结合性,先执行右边的叫右结合性。例如,对于表达式100 /25*16,/和*的优先级相同,再参考运算符的结合性,/和*具有左结合性,因此先执行左边的除法,再执行右边的乘法。
Python大部分运算符都具有左结合性,也就是从左到右执行。只有**乘方运算符、一元运算符(如not)、赋值运算符和三元运算符例外,它们具有右结合性,也就是从右向左执行。
3.1.3 条件表达式
条件语句(参见4.2节)无法参与表达式运算,如果在表达式中应用条件检测,可以选择条件表达式。条件表达式是Python唯一的三元运算符,语法格式如下:
<True表达式> if <条件表达式> else <False表达式>
如果条件表达式为True,则执行True表达式,否则执行False表达式。
【示例1】将变量n的绝对值赋值给变量x。
n = int(input("请输入一个数字:")) # 接收一个数字 x = n if n>= 0 else -n # 条件表达式,对用户输入的数字进行判断 print(x) # 打印x值
其中x = n if n>= 0 else -n表达式等效于下面条件语句:
if n>= 0: x = n else: x = -n
提示:可以使用列表结构来模拟条件表达式,语法格式如下:
[False表达式, True表达式][条件表达式]
针对示例1中的x = n if n>= 0 else -n一行代码,使用二维列表来表示,代码如下。
x = [-n, n][n>= 0]
如果n>= 0成立,返回True,转换为数字1,则从列表中读取第二个元素;如果n>= 0不成立,返回False,转换为数字0,则从列表中读取第一个元素。
【示例2】提示输入用户名和密码,如果用户名和密码都输入正确,则提示"欢迎登录!",如果用户名或密码输入错误,则提示"用户名或密码输入错误!",假定用户名为test,密码为123456。
username = input("请输入用户名:") password = input("请输入密码:") result = "欢迎登录!" if username =="test" and password == "123456" else "用户名或密码输入错误!" print(result)