目录

  • 1、算数运算符
  • 2、比较运算符
  • 3、赋值运算符
  • 3.1、增量赋值
  • 3.2、链式赋值
  • 3.3、交叉赋值
  • 3.4、解压赋值
  • 4、逻辑运算符
  • 4.1、not
  • 4.2、and
  • 4.3、or
  • 4.4、短路运算
  • 4.5、优先级
  • 5、成员运算符


1、算数运算符

假定一下变量:a = 10, b = 20

运算符

描述

实例

+

加,两个对象相加

a + b 输出结果 30

-

减,得到负数或是一个数减去另一个数

a - b 输出结果 -10

*

乘,两个数相乘或是返回一个被重复若干次的字符串

a * b 输出结果 200

**

幂,返回x的y次幂

a ** b 为10的20次方

/

除,x除以y

b / a 输出结果 2

//

取整除,返回商的整数部分

9 // 2输出结果 4,9.0 // 2.0 输出结果4.0

%

取模,返回除法的余数

b % a 输出结果 0

+	-	*	**	/	//	%
print(10 + 3)  # 加,13
print(10 - 3)  # 减,7
print(10 * 3)  # 乘,30
print(10 ** 3)  # 次方,1000
print(10 / 3)  # 除,3.3333333333333335
print(10 // 3)  # 取商,3
print(10 % 3)  # 取余,1

print(10 * 3.333)  # int类型与float类型统称为数字类型,他们两者是可以混着玩的
其他类型的数据也可以使用 + * 运算,但是效率很低基本不用
print([1,2,3]+[3,4,5])  # [1, 2, 3, 3, 4, 5]
print([1,2,3]*3)  # [1, 2, 3, 1, 2, 3, 1, 2, 3]

2、比较运算符

假定一下变量:a = 10, b = 20

运算符

描述

实例

==

等于,比较对象是否相等

(a == b) 返回 False

!=

不等于,比较两个对象是否不想等

(a != b) 返回 True

>

大于,比较 > 左边的值是否大于右边的值

(a > b) 返回 False

>=

大于等于,比较 >= 左边的值是否大于或等于右边的值

(a >= b) 返回 False

<

小于,比较 < 左边的值是否小于右边的值

(a < b) 返回 True

<=

小于等于,比较 <= 左边的值是否小于或等于右边的值

(a <= b) 返回 True

==	!=	>	<	>=	<=
print(10 == 10)
print(10 > 10)
print(10 >= 10)
print("abc" != "ddd")

print(10 > 3.1)
print(10 > "12")  # 不能比大小,不同类型数据之间不能进行比较

print("a12" == "a12")
print([1,2,3] == [1,2,3])

字符串通常用 len() 计算长度去比较
# 了解,字符串进行比较是按照ASCII表的顺序,对应位置进行比较
"abc"
"az"
print("abc" > "az")

l1=[111,222,333]
# l2=[111,999]
l2=[111,"aaa"]  # 列表进行比较也是对应位置比较,且对应位置的数据类型要一致
print(l1 > l2)  # 报错

print({"k1":111,"k2":222} == {"k2":222,"k1":111})   # 字典不需要顺序一样,但是key和value要一致,返回值为 True 
print({"k1":111,"k2":222} == {"k2":111,"k1":222})   # 返回值为 False

3、赋值运算符

运算符

描述

实例

=

简单的赋值运算符

c = a + b 将 a + b 的运算结果赋值为 c

+=

加法赋值运算符

c += a 等效于 c = c + a

-=

减法赋值运算符

c -= a 等效于 c = c - a

*=

乘法赋值运算符

c *= a 等效于 c = c * a

/=

除法赋值运算符

c /= a 等效于 c = c / a

%=

取模赋值运算符

c %= a 等效于 c = c % a

**=

幂赋值运算符

c **= a 等效于 c = c * * a

//=

取整除赋值运算符

c //= a 等效于 c = c // a

3.1、增量赋值

age += 2  # age = age + 2
age -= 2
age **= 2  # age = age ** 2
print(age)

3.2、链式赋值

x = 10
y = x
z = y
print(id(x))
print(id(y))
print(id(z))
# 链式赋值
x = y = z = 10

3.3、交叉赋值

x = 10
y = 20
# 思路原理
temp = x
x = y
y = temp
# 交叉赋值
x, y = y, x
print(x)
print(y)

3.4、解压赋值

salary = [1.1, 2.2, 3.3, 4.4, 5.5]
# 思路原理
mon1 = salary[0]
mon2 = salary[1]
mon3 = salary[2]
mon4 = salary[3]
mon5 = salary[4]
mon1, mon2, mon3, mon4, mon5 = salary  # 按照这个格式,用和值数量相同的变量名来保存解压后的值
print(mon1, mon2, mon3, mon4, mon5)
# 有弊端(需要改进)
变量名多一个不行少一个不行,必须与值一一对应
mon1, mon2, mon3, mon4 = salary  # 报错,值太多,没有足够的变量名来赋值保存
mon1, mon2, mon3, mon4, mon5, mon6 = salary  # 报错,值太少,多余的变量名没有值

# 改进后(用 *_ 来替换不需要的值所对应的变量名)
mon1, mon2, mon3, *_ = salary
print(mon1, mon2, mon3)
print(_)

mon1, mon2, *_, mon5 = salary
print(mon1)
print(mon2)
print(mon5)
# 对于字典类型来说,解压赋值拿到的是相对应的 key 值
dic={"k1":111, "k2":222, 'K3':333}
x, y, z = dic
print(x, y, z)

x, *_ = dic
print(x)
print(_)

4、逻辑运算符

4.1、not

not:代表把紧跟其后的条件结果取反
print(not 10 > 3)  # 输出结果 False

4.2、and

and:连接左右两个条件,左右两个条件必须同时成立,最终结果才为True
print(True and 1 > 0 and "aaa" == "aaa")  # 输出结果 True
print(True and 1 < 0 and "aaa" == "aaa")  # 输出结果 False

4.3、or

or:连接左右两个条件,左右两个条件但凡是有一个成立,最终结果就为True
print(True or 1 > 0 or "aaa" == "aaa")  # 输出结果 True
print(False or 1 < 0 or "aaa" != "aaa")  # 输出结果 True

4.4、短路运算

又称偷懒原则,即
and 连接多个条件时,只要第一个条件遇到结果为False,则最终结果为False
or 连接多个条件时,只要第一个条件遇到结果为True,则最终结果为True
# 示例
print(1 and 3 or 4)  # 输出结果 3
# 短路运算面试题:
>>> 1 or 3
1
>>> 1 and 3
3
>>> 0 and 2 and 1
0
>>> 0 and 2 or 1
1
>>> 0 and 2 or 1 or 4
1
>>> 0 or False and 1
False

4.5、优先级

优先级: not > and > or,也可以自己用()来规定优先级
# 示例
3>4 and 4>3 or not 1==3 and 'x' == 'x' or 3 >3
# 思路,用()按照默认优先级划分清楚
res = (3>4 and 4>3) or (not 1==3 and 'x' == 'x') or 3 >3

print(res)  # 输出结果 True

5、成员运算符

in / not in
判断子字符串是否在一个大字符串里面