Python基础必掌握的运算符和表达式

学Python数据科学,玩游戏、学日语、搞编程一条龙。

这次分享的内容是 Python 运算符和表达式的操作。

整套学习自学教程中应用的数据都是《三国志》、《三国无双》系列游戏中的内容。

Python 种可以通过组合对象和运算符来创建复杂的表达式。运算符是特殊符号,表示应该执行某种计算。

a = 1
b = 2
a + b
3

a + b - 5
-2

a + ba + b - 5 被称为表达式。Python 支持许多将数据对象组合成表达式的运算符。

在这里插入图片描述

算术运算符

Python 支持的算术运算符 假设变量: a=10,b=20

表达式 符号说明 执行结果
+ 加 - 两个对象相加 a + b 输出结果 30
- 减 - 得到负数或是一个数减去另一个数 a - b 输出结果 -10
* 乘 - 两个数相乘或是返回一个被重复若干次的字符串 a * b 输出结果 200
/ 除 - x除以y b / a 输出结果 2
% 取模 - 返回除法的余数 b % a 输出结果 0
** 幂 - 返回x的y次幂 a**b 为10的20次方, 输出结果 100000000000000000000
// 取整除 - 返回商的整数部分(向下取整) 9//2 是 4; -9//2 是 5

请添加图片描述

a = 4
b = 3

+a
4

-b
-3

a + b
7

a - b
1

a * b
12

a / b
1.3333333333333333

a % b
1

a ** b
64

比较运算符

符号 表达式 符号说明 执行结果
== a == b 等于 a与b的值相等
!= a != b 不等于 a与b的值不相等
< a < b 小于 a的值小于b
<= a <= b 小于或等于 a的值小于等于b
> a > b 大于 a的值大于b
>= a >= b 大于或等于 a的值大于等于b
a = 10
b = 20

a == b
False

a != b
True

a <= b
True

a >= b
False

a = 30
b = 30

a == b
True

a <= b
True

a >= b
True

特殊的浮点值等式比较

浮点数的比较不能直接进行比较。

x = 1.1 + 2.2
x == 3.3
False

确定两个浮点值是否 相等 的首选方法是在给定一些容差的情况下计算它们是否彼此接近。使用 abs() 返回绝对值。如果两个数字之间的差值的绝对值小于指定的容差,则它们彼此足够接近以被视为相等。

tolerance = 0.00001
x = 1.1 + 2.2
abs(x - 3.3) < tolerance
True

逻辑运算符

在这里插入图片描述

布尔操作数的逻辑表达式

x = 5
x < 10
True
type(x < 10)
<class 'bool'>

t = x > 10
t
False
type(t)
<class 'bool'>

callable(x)
False
type(callable(x))
<class 'bool'>

t = callable(len)
t
True
type(t)
<class 'bool'>
符号 表达式举例 符号说明
not not x < 10 非的含义
or x < 10 or callable(x) 或者
and x < 10 and callable(x) 并且

or 复合逻辑表达式

多个逻辑运算符和操作数可以串在一起形成复合逻辑表达式,使用了一种称为麦卡锡评估方法,任意一个元素为真,那么整个表达式为真。

x1 or x2 or x3 or … xn

def f(n):
	return n

f(0) or f(False) or f(1) or f(2) or f(3)
-> f(0) = 0 
-> f(False) = False
-> f(1) = 1
1

and 复合表达式

多个逻辑运算符和操作数可以串在一起形成复合逻辑表达式,如果 xi 中的全部为真,则此表达式为真。

x1 and x2 and  x3 and  … xn

def f(n):
	return n

f(1) and f(False) and f(2) and f(3)
-> f(1) = 1
-> f(False) = False
False

f(1) and f(0.0) and f(2) and f(3)
-> f(1) = 1
-> f(0.0) = 0.0
0.0

f(1) and f(2.2) and f('data')
-> f(1) = 1
-> f(2.2) = 2.2
-> f(data) = data
'data'

短路评估

用于惯用模式利用短路评估来简洁表达避免异常操作。

定义了两个变量a和b,进行判断。

# 常规操作
a = 3
b = 1
(b / a) > 0
True

# 意外情况,解释器引发异常
a = 0
b = 1
(b / a) > 0
Traceback (most recent call last):
  File "<pyshell#2>", line 1, in <module>
    (b / a) > 0
ZeroDivisionError: division by zero

# 可以使用这样的表达式来避免错误
a = 0
b = 1
a != 0 and (b / a) > 0
False

# 更简洁的表达方式
a = 0
b = 1
a and (b / a) > 0
0

定义默认值方法,指定值为零或空时选择默认值。

s = string or '<default_value>'

# string为非空,则为真
string = 'data'
s = string or '<default_value>'
s
'data'

# string是一个空字符串,则为假
string = ''
s = string or '<default_value>'
s
'<default_value>'

链式比较

比较运算符可以链接到任意长度。

x < y <= z
# 等价于
x < y and y <= z

x < f() <= z
# 等价于
x < f() and f() <= z

位运算符

位运算符将操作数视为二进制数字序列并逐位对它们进行操作。
在这里插入图片描述

符号 表达式 含义 符号说明
& a & b 按位与 按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0
| a | b 按位或 按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。
~ ~a 按位否定 按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。
^ a ^ b 按位异或(异或) 按位异或运算符:当两对应的二进位相异时,结果为1
>> a >> n 右移 n 位置 右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数
<< a << n 左移 n 位置 左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。
# 0b1010 = 10
# 0b1100 = 12

'0b{:04b}'.format(0b1100 & 0b1010)
'0b1000'
'0b{:04b}'.format(0b1100 | 0b1010)
'0b1110'
'0b{:04b}'.format(0b1100 ^ 0b1010)
'0b0110'
'0b{:04b}'.format(0b1100 >> 2)
'0b0011'
'0b{:04b}'.format(0b0011 << 2)
'0b1100'

身份运算符

Python 提供了两个运算符 is 和 is not,它们确定给定的操作数是否具有相同的标识,即引用相同的对象。与相等不同,这意味着两个操作数引用包含相同数据但不一定是相同对象的对象。
在这里插入图片描述

x = 1001
y = 1000 + 1
print(x, y)
1001 1001

x == y
True
x is y
False

# 虽然值相等 但是引用对象不一样
id(x)
2643115955696
id(y)
2643115956944

运算符优先级

在这里插入图片描述

Python 运算符的优先顺序,从低到高。

符号 符号描述
or 布尔或
and 布尔与
not 布尔非
==, !=, <, <=, >, >=, is,is not 比较,身份
| 按位或
^ 按位异或
& 按位与
<<,>> 位移
+,- 加法,减法
*, /, //,% 乘法、除法、除法、取模
+x, -x,~x 一元正,一元否定,按位否定
** 求幂
2 * 3 ** 4 * 5
810

括号中的表达式总是首先执行。

20 + 4 * 10
60

(20 + 4) * 10
240

无用的括号。

(a < 10) and (b > 30)
# 等价于
a < 10 and b > 30

增广赋值运算符

赋值右侧的值是包含其他变量的表达式是完全可行。

a = 10
b = 20
c = a * 5 + b
c
70

a = 10
a = a + 5
a
15

b = 20
b = b * 3
b
60

错误的用法,使用变量之前并为赋值。

z = z / 12
Traceback (most recent call last):
  File "<pyshell#11>", line 1, in <module>
    z = z / 12
NameError: name 'z' is not defined

简写方式。

简写 标准写法
a += 5 a = a + 5
a /= 10 a = a / 10
a ^= b a = a ^ b

猜你喜欢

转载自blog.csdn.net/qq_20288327/article/details/124389000
今日推荐