Python从入门到精通(微课精编版)
上QQ阅读APP看书,第一时间看更新

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)