接上章 : 02-2.python入门语法一变量与数据类型2
本文将深入介绍Python中的各种操作符,包括算术操作符、比较操作符、逻辑操作符等,并详细讲解如何使用这些操作符构建表达式。通过丰富的示例与详细的讲解,帮助读者全面掌握这一重要的基础知识,从而在Python编程的道路上更加得心应手。
一、操作符
算术操作符
算术操作符用于执行基本的数学运算,如加法、减法、乘法、除法等,是我们在编程中进行数值计算时最常用到的工具。Python支持以下几种基本的算术操作符:
加法运算符(+):
例如如下代码:
a = 5.2 b = 3.1 the_sum = a + b # sum的值为8.3 print("the_sum的值为:", the_sum) |
除此之外,“+”还可以作为字符串(包括后续要介绍的序列)的连接运算符。例如:
s1 = 'Hello, ' s2 = 'Charlie' # 使用+连接两个字符串 print(s1 + s2) |
减法运算符(-):
例如:
c = 5.2 d = 3.1 sub = c - d # sub的值为2.1 print("sub的值为:", sub) |
乘法运算符(*):
示例代码如下:
x = 5 y = 4 result = x * y print('x * y =', result) # 输出:20 |
除法运算符(/):
需要注意的是,在Python中,除法运算(/)的结果始终为浮点数类型,即使可以整除。例如:
a = 10 b = 5 print('a / b =', a / b) # 输出:2.0 |
取模运算符(%):
用于计算两个数字相除的余数,比如:
a = 5 b = 3 print('a % b =', a % b) # 输出:2 |
幂运算操作符()**:
用于计算一个数字的指数幂,像:
a = 5 b = 3 print('a ** b =', a ** b) # 输出:125 |
比较操作符
比较运算符用于比较值,它根据条件返回True或False,常用于条件判断语句中,来决定程序的执行流程。Python中的比较运算符主要有以下这些:
等于运算符(==):
比较两个操作数是否相等,例如:
x = 10 y = 12 print('x == y is', x == y) # 输出:x == y is False |
不等于运算符(!=):
判断两个操作数是否不相等,如:
x = 10 y = 12 print('x!= y is', x!= y) # 输出:x!= y is True |
大于运算符(>):
检查左边的操作数是否大于右边的操作数,示例:
x = 10 y = 12 print('x > y is', x > y) # 输出:x > y is False |
小于运算符(<):
验证左边操作数是否小于右边操作数,比如:
x = 10 y = 12 print('x < y is', x < y) # 输出:x < y is True |
大于等于运算符(>=):
判断左边操作数是否大于或等于右边操作数,像这样:
x = 10 y = 10 print('x >= y is', x >= y) # 输出:x >= y is True |
小于等于运算符(<=):
用于确定左边操作数是否小于或等于右边操作数,例如:
x = 10 y = 12 print('x <= y is', x <= y) # 输出:x <= y is True |
逻辑操作符
逻辑运算符是和运算符(and)、或运算符(or)和非运算符(not),它们用于连接和修改Boolean上下文中的表达式,从而表达更复杂的条件语义。
与运算符(and):
当表达式中含有Boolean类型的操作数时,对于and操作符,只要左边的表达式为假,整个表达式就返回左边表达式的值(因为只要有一个为假就为假);只有当左边表达式为真时,整个表达式返回的值才是右边表达式的值。例如:
x = 5 y = 0 print(x and y) # 输出:0 x = 5 y = 10 print(x and y) # 输出:10 |
在Python中,对于非Boolean类型的值在Boolean上下文中的求值,and操作符遵循这样的规律:如果左边的值为假值(如0、空字符串、None等),则整个表达式返回左边的值;如果左边的值为真值,则返回右边的值。例如:
test1 = 12 test2 = 0 test3 = '' print(test1 and test3) # 输出:'' print(test3 and test1) # 输出:'' |
或运算符(or):
对于Boolean类型操作数的情况,只要两边的表达式有一个为真,整个表达式的结果就是真(即返回真值表达式的值),只有当两边都是假时,才返回假值表达式的值。例如:
x = 5 y = 0 print(x or y) # 输出:5 x = 0 y = 0 print(x or y) # 输出:0 |
非运算符(not):
它的作用是对操作数取反,若操作数是True则返回False,若操作数是False则返回True。例如:
x = True print(not x) # 输出:False x = 5 print(not x < 10) # 输出:False,因为x < 10为True,取反后就是False |
其他常用操作符
除了上述常见的算术、比较和逻辑操作符外,Python中还有一些其他常用的操作符,它们在不同的场景下发挥着重要作用。
成员关系运算符(in、not in):
用于判断某个元素是否在指定的数据类型(如列表、元组、字典、集合等)里面。例如:
computer = ["主机", "显示器", "鼠标", "键盘"] print("主机" in computer) # 输出:True print("音响" not in computer) # 输出:True |
身份运算符(is、is not):
is 操作符比较的是对象的身份标识是否相等,即是否是同一个对象,是否指向同一个内存地址;is not则是取反的意思。例如:
a = 2 b = 2 print(a is b) # 输出:True,因为Python对于小整数有缓存机制,这里a和b指向同一个对象 |
二、操作符的优先级
优先级概述
在Python中,操作符具有不同的优先级,这决定了在一个包含多个操作符的表达式中,哪个操作符会先被计算。例如在表达式 2 + 3 * 4 中,按照优先级规则,会先进行乘法运算 3 * 4 得到 12 ,然后再进行加法运算,最终结果为 14 ,而不是先计算 2 + 3 再乘以 4 得到 20 。了解操作符的优先级,能帮助我们准确地预测表达式的计算结果,避免出现逻辑错误。
优先级具体列表
以下是Python中操作符从低到高的优先级列表:
- lambda:用于定义匿名函数,它在操作符优先级中处于相对较低的位置。例如:lambda x: x + 1 ,不过在实际复杂表达式中它与其他操作符共同出现并涉及优先级比较的情况相对少一些。
- or:逻辑或操作符,如 True or False ,在多个逻辑判断的表达式里按照其优先级参与运算。
- and:逻辑与操作符,像 True and False ,优先级高于 or ,例如在表达式 True and False or True 中,会先计算 True and False 得到 False ,然后再计算 False or True ,最终结果为 True 。
- not:逻辑非操作符,用于对布尔值取反,是一元操作符,优先级高于 and 和 or 。例如 not True 结果为 False ,在复杂逻辑表达式里会先执行它来改变操作数的布尔值状态。
- in、not in:成员关系运算符,用于判断元素是否在某个序列(如列表、元组、字典等)中,像 'a' in ['a', 'b', 'c'] 会返回 True ,其优先级高于逻辑操作符,低于算术操作符等。
- is、is not:身份运算符,比较两个对象是否是同一个对象(即是否指向相同的内存地址),例如 a = [1, 2]; b = a; print(a is b) 会返回 True ,其优先级与 in、not in 处于相近层级。
- <、<=、>、>=、==、!=:比较操作符,用于比较两个值的大小关系或者是否相等,返回布尔值。例如 3 > 2 返回 True ,这些比较操作符的优先级低于算术操作符,常用于条件判断语句中的条件构建。
- |:按位或操作符,是针对二进制位进行的操作,将两个操作数对应的二进制位进行或运算,例如 5 | 3 (二进制 0101 | 0011 )得到 7 (二进制 0111 ),它的优先级高于逻辑操作符,低于移位操作符等。
- ^:按位异或操作符,同样针对二进制位,当两个操作数对应二进制位不同时为 1 ,相同时为 0 ,像 5 ^ 3 (二进制 0101 ^ 0011 )结果为 6 (二进制 0110 )。
- &:按位与操作符,对两个操作数的二进制位进行与运算,例如 5 & 3 (二进制 0101 & 0011 )得到 1 (二进制 0001 ),优先级高于逻辑操作符。
- <<、>>:移位操作符,分别是左移和右移操作,比如 2 << 2 (二进制 10 左移两位变成 1000 )结果为 8 ,在数值运算相关的操作符中它们有其特定的优先级位置。
- +、-:这里既包括加法和减法算术运算符,也包含作为正负号的一元运算符情况。例如 3 + 5 是常规加法运算,而 -3 里 - 就是取负操作,它们的优先级在幂运算之后,乘除运算等之前(当作为算术运算符时)。
- *、/、//、%:乘、除、地板除、取模这些算术操作符,常用于数值计算,像 10 / 3 得到浮点数 3.3333333333333335 ,10 // 3 得到整数 3 ,10 % 3 得到余数 1 ,它们的优先级高于加法和减法算术操作符。
- +x、-x:一元的正号和负号操作符,比如 -5 里 - 改变了 5 的正负性,在运算顺序上按照其优先级规则参与计算。
- ~x:按位非操作符,对操作数的二进制位进行取反操作(注意是按位取反后再加 1 得到对应结果),例如 ~5 (二进制 0101 取反后为 1010 ,再考虑补码规则等最终对应结果),有其特定的优先级安排。
- ****:幂运算操作符,用于计算指数幂,如 2 ** 3 得到 8 ,它在所有操作符中优先级相对较高,会先于大部分其他操作符进行计算。
使用括号改变计算顺序
在编写代码时,尽管操作符有既定的优先级规则,但为了让代码的逻辑更加清晰易懂,尤其是对于复杂的表达式,我们可以使用括号来明确表达式的计算顺序。例如表达式 2 + (3 * 4) ,通过括号明确了先计算括号内的乘法 3 * 4 得到 12 ,再进行加法运算,最终结果为 14 。这样的写法比直接写 2 + 3 * 4 更直观,让人一眼就能明白计算的先后顺序,也便于后续的代码维护和阅读。再比如对于逻辑表达式 (True or False) and True ,括号使得先计算括号内的 True or False ,避免了因逻辑操作符优先级带来的潜在理解混淆。所以,合理运用括号是提高代码可读性和可维护性的重要手段,在编写复杂表达式时值得提倡。