(三)Python从入门到精通之运算符与表达式

上一篇:(二)Python从入门到精通之常用内置对象

Python运算符与表达式

  • 在Python中,单个常量或变量可以看作最简单的表达式,使用除赋值运算符之外的其他任意运算符和函数调用连接的式子也属于表达式。
  • 运算符优先级遵循的规则为:算术运算符优先级最高,其次是位运算符、成员测试运算符、关系运算符、逻辑运算符等,算术运算符遵循“先乘除,后加减”的基本运算原则。
  • 虽然Python运算符有一套严格的优先级规则,但是强烈建议在编写复杂表达式时使用圆括号来明确说明其中的逻辑来提高代码可读性。
    在这里插入图片描述

3.1算术运算符

  • +运算符除了用于算术加法以外,还可以用于列表、元组、字符串的连接,但不支持不同类型的对象之间相加或连接。
>>> [1, 2, 3] + [4, 5, 6]          #连接两个列表
[1, 2, 3, 4, 5, 6]
>>> (1, 2, 3) + (4,)               #连接两个元组
(1, 2, 3, 4)
>>> 'abcd' + '1234'                #连接两个字符串
'abcd1234'
>>> 'A' + 1                        #不支持字符与数字相加,抛出异常
TypeError: Can't convert 'int' object to str implicitly
>>> True + 3                       #Python内部把True当作1处理
4
>>> False + 3                      #把False当作0处理
3
  • *运算符除了表示算术乘法,还可用于列表、元组、字符串这几个序列类型与整数的乘法,表示序列元素的重复,生成新的序列对象。字典和集合不支持与整数的相乘,因为其中的元素是不允许重复的。
>>> True * 3
3
>>> False * 3
0
>>> [1, 2, 3] * 3
[1, 2, 3, 1, 2, 3, 1, 2, 3]
>>> (1, 2, 3) * 3
(1, 2, 3, 1, 2, 3, 1, 2, 3)
>>> 'abc' * 3
'abcabcabc'
  • 运算符/和//在Python中分别表示算术除法和算术求整商。
>>> 3 / 2                    #数学意义上的除法
1.5
>>> 15 // 4                  #如果两个操作数都是整数,结果为整数
3
>>> 15.0 // 4                #如果操作数中有实数,结果为实数形式的整数值
3.0
>>> -15//4                   #向下取整
-4
  • %运算符可以用于整数或实数的求余数运算,还可以用于字符串格式化,但是这种用法并不推荐。
>>> 789 % 23                       #余数
7
>>> 123.45 % 3.2                 #可以对实数进行余数运算,注意精度问题
1.849999999999996
>>> '%c, %d' % (65, 65)       #把65分别格式化为字符和整数
'A, 65'
>>> '%f,%s' % (65, 65)         #把65分别格式化为实数和字符串
'65.000000,65'
  • **运算符表示幂乘。
>>> 3 ** 2                    #3的2次方,等价于pow(3, 2)
9
>>> pow(3, 2, 8)              #等价于(3**2) % 8
1
>>> 9 ** 0.5                  #9的0.5次方,平方根
3.0
>>> (-9) ** 0.5               #可以计算负数的平方根
(1.8369701987210297e-16+3j)
>>> 3 ** 2 ** 3               #幂运算符从右往左计算(2的3次方=8,3的8次方=6561)
6561

3.2关系运算符

  • Python关系运算符最大的特点是可以连用。使用关系运算符的一个最重要的前提是,操作数之间必须可比较大小。
>>> 1 > 6 < math.sqrt(9)         #具有惰性求值或者逻辑短路的特点
False                            #没有报错是因为1>6已经错了,不继续往下算了
>>> 1 < 6 < math.sqrt(9)         #还没有导入math模块,抛出异常
NameError: name 'math' is not defined
>>> import math
>>> 1 < 6 < math.sqrt(9)
False
>>> 'Hello' > 'world'              #比较字符串大小
False
>>> [1, 2, 3] < [1, 2, 4]          #比较列表大小
True
>>> 'Hello' > 3                    #字符串和数字不能比较
TypeError: unorderable types: str() > int()
>>> {1, 2, 3} < {1, 2, 3, 4}       #测试是否子集
True
>>> {1, 2, 3} == {3, 2, 1}         #测试两个集合是否相等
True
>>> {1, 2, 4} > {1, 2, 3}          #集合之间的包含测试
False
>>> {1, 2, 4} < {1, 2, 3}
False

3.3成员测试运算符in

  • 成员测试运算符in用于成员测试,即测试一个对象是否为另一个对象的元素。
>>> 3 in [1, 2, 3]                #测试3是否存在于列表[1, 2, 3]中
True
>>> 5 in range(1, 10, 1)          #range()是用来生成指定范围数字的内置函数
True
>>> 'abc' in 'abcdefg'            #子字符串测试
True
>>> for i in (3, 5, 7):           #循环,成员遍历
    print(i, end='\t')
3	5	7

3.4集合运算符

  • 集合的交集、并集、对称差集等运算借助于&、|、^来实现,而差集则使用减号运算符实现(注意,并集运算符不是加号)。
>>> {1, 2, 3} ^ {3, 4, 5}          #对称差集
{1, 2, 4, 5}
>>> {1, 2, 3} - {3, 4, 5}          #差集
{1, 2}

3.5逻辑运算符

  • 逻辑运算符and、or、not常用来连接条件表达式构成更加复杂的条件表达式,并且and和or具有惰性求值或逻辑短路的特点,当连接多个表达式时只计算必须要计算的值。
  • 另外要注意的是,运算符and和or并不一定会返回True或False,而是得到最后一个被计算的表达式的值,但是运算符not一定会返回True或False。
>>> 3>5 and a>3              #3>5错就不往后算了注意,此时并没有定义变量a
False
>>> 3>5 or a>3               #3>5的值为False,所以需要计算后面表达式
NameError: name 'a' is not defined
>>> 3<5 or a>3               #3<5的值为True,不需要计算后面表达式
True
>>> 3 and 5                  #最后一个计算的表达式的值作为整个表达式的值
5
>>> 5>4 and 6 and 9
>9 
>>> 3 and 5>2
True
>>> 3 not in [1, 2, 3]       #逻辑非运算not
False
>>> 3 is not 5               #not的计算结果只能是True或False之一
True
>>> not 3
False

3.6补充说明

  • Python还有赋值运算符=和+=、-=、*=、/=、//=、**=、|=、^=等大量复合赋值运算符。
  • Python不支持++和–运算符,虽然在形式上有时候似乎可以这样用,但实际上是另外的含义,要注意和其他语言的区别。
>>> i = 3
>>> ++i                            #正正得正
3
>>> +(+3)                          #与++i等价
3
>>> i++                            #Python不支持++运算符,语法错误
SyntaxError: invalid syntax
>>> --i                            #负负得正,等价于-(-i)
3
>>> ---i                           #等价于-(-(-i))
-3
>>> i--                            #Python不支持--运算符,语法错误
SyntaxError: invalid syntax

下一篇:(四)Python从入门到精通之常用内置函数

发布了100 篇原创文章 · 获赞 240 · 访问量 2万+

猜你喜欢

转载自blog.csdn.net/zag666/article/details/104686910