Python的运算符

一、基本运算符

1、算术运算符

以下假设变量: a=10,b=20

Python的算术运算符与数学上的运算符是一样的。比如加减乘除。只是个别表示的符号不一致。

Python的运算符插图
截图于菜鸟教程

对于上图有了基本的认识之后。我们在Python中一一讲解。

# + - * / // % **  (与数学运算符一致)

# 加法 +  (两个Nubmer类型相加)
a = 10 + 20
a = 20.5 - 10.5 
print(a)  # 10.0

# 减法 - (两个Number类型相减)
b =  10 - 5
print(b) # 5

# 乘法 *

c = 5 * 6
print(c)  # 30

# 除法 ( / 和 //  )

d = 10 / 2   # 10 除以 3 保留余数
print(d)  #  5.0

# 整除  // 
e = 10 // 3  #  10 整除以 3 取整
print(e)  # 3 

# % 取余(模) 运算
x = 10 % 3  #  10 / 3 之后取余
print(x)  # 1

# ** 幂运算
y = 10 ** 2  # 10的2次方
print(y)  # 100

有一点要注意,算术运算符一般引用与纯数字。但是小部分可以应用于字符串。

那就是 +*

# Python的 + 和 乘 在字符串中引用

# + 在字符串中用于+号两边的字符串进行连接,组成一个新的字符串。

print('hello' + 'world')  # helloworld

# * 在字符串与数字进行乘法运算的时候,会对字符串做重复的操作。数字则为重复的次数。

print('=' * 10)  # ==========

2、比较运算符

比较运算符用来比较两个值。其返回的值是一个布尔值。返回True或Flase。

以下假设变量a为10,变量b为20:

Python的运算符插图1
截图自菜鸟教程

以下对数字类型做比较运算。

# 比较运算符

# ==  !=  >   <   >=   <=

# ==  比较两个值是否相等(也比较数据类型)
a = 10
b = 20 
print(a == b)  # False
b = '10'   # 字符串的1和0
print(a == b) # 数据类型不一致也是 Flase
b = 10 
print(a == b )  # 数据类型一致值一致 True

# != 不等于 比较两个值是否不等于(也比较数据类型)
a = 10 
b = 20 
print(a != b) # True
b = '10'
print(a != b)  # True

# >  大于 比较两个值是否大于另一个值
a = 10 
b = 20 
print(a > b ) # False
print(a > 5) # True

#  <  小于 比较两个值是否小于另一个值
a = 10 
b = 20 
print(a < b)  # True
print(a < 5)  # False

#  >=   大于或等于

a = 10 
b = 20 
print(b >= a) # True
a = 10 
b = 10 
print(a > b ) # False 他们是==的
print(a >= b)  # True 大于或等于 他们是等于 所以为True

# <= 小于或等于与 >= 基本一致 不再演示

下面我们使用字符串做比较运算:

字符串做比较运算,== != 与数字类型一致。不同的是 字符串做 >运算 或 < 运算 和 >= 以及 <= 是基于字符串中的第一个字符的ASCII十进制进行比较的。

#  在字符串中的 > 和 < 以及 >= 和 <= 

print('a' > 'b')  # False  a的ASCII码为97 b的ASCII码为98  所以a大于b 为false

print('"' > '!')  # True  "的ASCII码为34,而!的ASCII码为33 所以"大于! 为True


# 字符串使用比较运算符会优先比较首字母的ASCII码,如果首字母没有得出结果,则看两者第二个字母的ASCII码。以此类推
print('hello' > 'world')   # False  h的ASCII码为104 而 w的ASCII码为119 所以h大于w为False

# >= 与 <= 与 数字进行 >= 和 <= 运算基本一致。 只不过字符串比较的是ASCII码

3、赋值运算符

3.1 增量赋值

在Python中除了支持普通的=赋值以外,还支持增量赋值、链式赋值、交叉赋值、解压赋值,这些赋值方式出现的意义,是为了让我们的代码更加精简。

Python的运算符插图2
截图自菜鸟教程
# 赋值运算符

a = 10   # = 赋值运算符 将右边的赋值给左边的变量
print(a)

a += 5   # += 加法赋值运算符  结果 15   类似于 a = a + 5
print(a)

a = 10
a -= 5   # -= 减法赋值运算符  结果 5   类似于 a = a  - 5 
print(a)

# *=   /=  //=  %=   **=  与上述一致这里不再演示。
3.2 链式赋值

假如我们想把某个值,一次性赋值给三个或多个变量。那么我们就可以使用链式赋值。

# 不是用链式赋值的正常赋值 
a = 100
b = 100
c = 100

# 使用链式赋值的写法

a = b = c = 100
print(a,b,c)
3.3 交叉赋值

假如我们有这样一个需要,我们想要变量a和变量b交换一下互相的值。那么我们就需要第三个变量用来存储其中一个变量的值。

a = 10 
b = 20 
temp = a   # 定义第三个变量 暂时存储变量a的值
a = b  
b = temp 
print(a,b)   # 20   10  完成交换

使用交叉赋值,只需要简单几步完成两个变量值交换操作。

a = 10 
b = 20 
a,b = b,a    # 将b的值赋值给a,将a的值赋值给b
print(a,b)
3.4 解压赋值

如果我们想要把一个列表的值,赋值给多个变量的时候。我们通常是这么做的。

list = ['x1ong',17,'china','student']

name = list[0]
age = list[1]
addr = list[2]
job = list[3]
print(name,age,addr,job)   # x1ong 17 china student

当我们使用解压赋值的时候,只需要这么做:

list = ['x1ong',17,'china','student']

name,age,addr,job = list   # 注意这里的变量和列表的值数量应该是一一对应的。
print(name,age,addr,job)  # x1ong 17 china student   

注意:解压赋值的变量名要和列表的数量是一一对应的。不然会报错。

但是,如果我们想要取头尾的某些值,可以使用*_代替。

list = ['x1ong',17,'china','student']

# 比如说我们只想取姓名和年龄。
name,age,*_ = list
# print(name,age)   # x1ong 17 

# 比如说我们只想取第一个值和最后一个值
name,*_,job = list
print(name,job)   # x1ong student

ps:字符串、字典、元组、集合类型都支持解压赋值

4、逻辑运算符

Python语言支持逻辑运算符,以下假设变量 a 为 10, b为 20:

Python的运算符插图3
截图自菜鸟教程

逻辑运算符在运算之前都会将所有的条件或者值转换为布尔值即True和False。在Python中每个数据类型,都有着对应的布尔值。

在Python中只有以下几个值会被转为False。其余都为True

0 和 NONE 以及空(空字符串、空字典、空元组、空列表) 和 布尔值中的False本身

示例:
a = 0  # False
b = NONE 
c = ''
d = {}
e = ()
f = []

# 以上这些都会被转为False,其余的都为True。  (注意这里说的是数据类型本身,并没有与比较运算符配合使用)
4.1 逻辑运算符 not

逻辑运算符not就是取反的意思。将TrueFalseFalseTrue

a  = 10 
b  = 20 

print(a > b)  # False

# 逻辑运算符 not 取反,将原本的False变True。原本的True变False
print(not a > b) # True
print(not True) # False
print(not False)  # True
4.2 逻辑运算符 and

and即并且的意思。表示需要同时满足。

# 逻辑运算符and。表示并且的意思。需要and符前后的条件都要为True。最后的结果才为True,否则为False
# 同真为真,一假则假
print(True and False)  # False
print(True and True)   # True
print(False and False)  # False

a =  10 > 8  # True 
b = 5 < 10  # False

print(a and b ) # True and  False   最后的结果为False


# 连续多个and(and有并且即同时满足的意思)

# 可以使用and运算符连接多个条件,会按照从左到右的顺序依次判断,
# 对于and运算符,一旦判断的时候,遇到False,则不需要再往后判断,就可以得出最后的结果为False。因为它必须同时为True。最后的结果才为True。有一个为False。最后的结果就为False
print(1 and 2 and 1 != 2 and 0 and 'hello')  # 结果 0 (转为布尔值为False) 为什么结果为0不为False呢。其实这里涉及到了一个逻辑运算符短路问题。下面会讲到 。
4.3 逻辑运算符 or

or即或者的意思。只要满足一个即可。也就是只要有一个True,那么最后的结果就为True

# 逻辑运算符 or
# or 表示或者的意思  or前后的条件只需要有一个True,那么最后的结果就为True

a = 10 
b =  20
print(a > b or 10 > 20)  # False   or运算符两边的条件都为False,所以最终的结果为False
print(100 > 20 or 10 > 100) # True  or运算符左边的条件为True,不管or运算符右边的结果为True或者False,那么最后的结果都是True
print(100 > 10 or 100 > 50) # True  or运算符两边的条件都为True,那么最后的结果也为True
# 逻辑运算符 or
# or 表示或者的意思  or前后的条件只需要有一个True,那么最后的结果就为True

a = 10 
b =  20
print(a > b or 10 > 20)  # False   or两边的条件都为False,所以最终的结果为False
print(100 > 20 or 10 > 100) # True  or运算符左边的条件为True,不管or运算符右边的结果为True或者False,那么最后的结果都是True
print(100 > 10 or 100 > 50) # True  or运算符两边的条件都为True,那么最后的结果也为True


# 可以使用or连接多个条件,只要有一个条件为True,那么无需看后面的条件。最后的结果都为True

# 对于or运算符来说,第一个条件为True,那么无需看后面的条件了。最后的结果为就为True
print(2 > 1 or 1 > 10 or 10 != 20 or 0 or '' or [])  # True
4.4 逻辑运算的优先级 not > and > or
# 逻辑运算符的优先级 not > and > or  同一优先级默认从左到右运算

print(10 and 10 > 20 or 10 >= 10 and 1 == '1' or 'hello' == 'hello')  # True 

# 其实可以使用括号将优先级较高的括起来。用于区别优先级。意义与原意一致
'''
解析:

(1) not 在逻辑运算符中优先级较高,就是把紧跟其后的条件或者值取反,所以not与其后面的条件或者是值是不可区分的一部分。
例如:  print(not 10 )   print(not 10 > 5 )

(2) 如果语句中全部都是使用 and 或者 全部使用or进行连接,那么这就不需要去区分优先级。因为他们是同一优先级,我们只需要从左到右依次运算即可。

(3) 如果语句中有 and 有 or,那么我们可以用括号将and运算符左右两边的条件括起来。以便于区分优先级。括起来的优先级与原优先级一致。只不过易于区分。
'''

#           False        or      True               or    True     那么最后的结果就为True
print((10 and 10 > 20) or (10 >= 10 and 1 == '1') or 'hello' == 'hello')  # True 
4.5 逻辑运算符的短路

短路运算:逻辑运算的结果一旦可以确定,那么就以当前处计算到值作为最后的结果返回。

# 逻辑运算符中的短路问题

#        真       or    假      or  假   or   假     
'''
因为里面有个为真,所以最后的结果为就为真,不过在第一个and的为真的时候,就没有再往后面判断了。因为最后的结果就可以确定了。
所以将10作为返回值返回。
10转为布尔值则为True
'''

print((1 and 10) or ('' and 10) or 0 or ([] and {}))1

# 逻辑运算符中的短路问题

#        真       or    假      or  假   or   假     
'''
因为里面有个为真,所以最后的结果为就为真,不过在第一个and的为真的时候,就没有再往后面判断了。因为最后的结果就可以确定了。
所以将10作为返回值返回。
10转为布尔值则为True
'''

print((1 and 10) or ('' and 10) or 0 or ([] and {}))

# 短路运算小练习

# 对于and运算符的短路,当and运算符遇到为False的值时候就停止。并将当前值作为返回值返回。
# 对or运算符符的短路,当or运算符遇到True的值时就停止,并将当前作为返回值返回。

print(10 and 20)  # 20 

print(1 and 20)  # 20

print(1 or False)  # 1 

print(False or False)  # False

print(True or False)  # False

5、 成员运算符

Python的运算符插图4
截图自菜鸟教程

# in 用于判断一个字符,是否在另一个序列中。in运算符左边的字符,是否在in运算符右边的序列中

# hello在helloworld字符串中所以返回False
print('hello' in 'helloworld')  # True
# x1ong在列表中,所以返回True
print('x1ong' in ['x1ong',17,'china','student'])  # True
# loveyou 不再字符串中,所以返回False
print('loveyou' in '空')  # False  


# not in  表示要查找的值不在一个序列中。

# 123不在helloworld字符中 为True
print('123' not in 'helloworld')  # True

# hello 在helloworld字符串中,所以为False
print('hello' not in 'helloworld') # False

# xiao不在列表中,所以最后的结果为False
print('xiao' not in ['x1ong',17,'china']) # True

声明:本文章所整理学习的知识全部由Egon老师传授

Egon老师知乎首页:https://www.zhihu.com/people/xiaoyuanqujing

本文作者: x1ong
免责声明:本博客所有文章仅用于学习交流
转载声明:文章为作者原创文章 转载请注明来源
本文链接: https://www.giaoblog.com/python/15807.html
上一篇
下一篇