Python基础-04运算符

四、运算符

1. 算术运算符

算数运算符是 运算符的一种

运算符描述实例
+10 + 20 = 30
-10 - 20 = -10
*10 * 20 = 200
/10 / 20 = 0.5
//取整除
(地板除)
返回除法的整数部分(商) 9 // 2 输出结果 4(向下取整)
eg. -10 // 3 = -4,10 // 3 = 3
%取余数
(取模)
返回除法的余数
eg. 9 % 2 = 1
**又称次方、乘方

优先级

  • 和数学中的运算符的优先级一致,在 Python 中进行数学计算时,同样也是:

    • 先乘除后加减
    • 同级运算符是 从左至右 计算
    • 可以使用 () 调整计算的优先级
  • 以下表格的算数优先级由高到最低顺序排列

运算符描述
()用来调整优先级
**幂 (最高优先级)
* / % //乘、除、取余数、取整除
+ -加法、减法

- divmod()函数(了解)

divmod(被除数, 除数):同时得到商和余数,返回值是元组

- 数字型变量 之间可以直接计算

  • 在 Python 中,两个数字型变量是可以直接进行 算数运算的
  • 如果变量是 bool 型,在计算时
    • True 对应的数字是 1
    • False 对应的数字是 0
  • 自动转型:整数和浮点数混合运算时,表达式结果自动转型成浮点数。比如:2+8.0 的结果是 10.0

- 运算符的字符串使用

  • +:连接字符串
print('1' + '2') # 输出12

print('1' + 1) # 错误
  • *:重复字符串

在 Python 中 * 运算符还可以用于字符串,计算结果就是字符串重复指定次数的结果

print("-" * 50)  # 输出'----------------------------------------' 

2. 赋值运算符和复合赋值运算符

使用 = 可以给变量赋值

格式:变量 = 值或变量

赋值运算符描述实例
=简单的赋值运算符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. 比较(关系)运算符

  • 关系运算符的结果是bool类型
运算符描述
==检查两个操作数的值是否 相等,如果是,则条件成立,返回 True
!=检查两个操作数的值是否 不相等,如果是,则条件成立,返回 True
>检查左操作数的值是否 大于 右操作数的值,如果是,则条件成立,返回 True
<检查左操作数的值是否 小于 右操作数的值,如果是,则条件成立,返回 True
>=检查左操作数的值是否 大于或等于 右操作数的值,如果是,则条件成立,返回 True
<=检查左操作数的值是否 小于或等于 右操作数的值,如果是,则条件成立,返回 True

Python 2.x 中判断 不等于 还可以使用 <> 运算符

!= 在 Python 2.x 中同样可以用来判断 不等于

4. 逻辑运算符

- 逻辑运算符

  • 逻辑运算符的结果是bool类型
运算符逻辑表达式描述
andx and y只有 x 和 y 的值都为 True,才会返回 True
否则只要 x 或者 y 有一个值为 False,就返回 False
orx or y只要 x 或者 y 有一个值为 True,就返回 True
只有 x 和 y 的值都为 False,才会返回 False
notnot x如果 x 为 True,返回 False
如果 x 为 False,返回 True
    # 逻辑与:理解成乘法,True = 1,False = 0
    print(True and True)  # True
    print(True and False)  # False
    print(False and True)  # False
    print(False and False)  # False

    # 逻辑或:理解成加法,True = 1,False = 0
    print(True or True)  # True
    print(True or False)  # True
    print(False or True)  # True
    print(False or False)  # False

    # 逻辑非
    print(not True)  # False
    print(not False)  # True

- 逻辑运算符计算

  • 当逻辑运算符两侧都是数字时
print(1 and 2 and 3) # 输出3 ,输出最右边的and后的值
# 过程:先1and2,得2真,然后2and3,得3真,表达式得3

print(0 and 2 and 3) # 输出0
# 过程:0 and 2 假,0已经为假,直接输出0
print(1 or 2 or 3) # 输出1 ,输出最左边的or前的值
# 过程:1 or 2, 1已经为真,不用继续算了,输出1

print(0 or 2 or 3) # 输出2 
# 过程:

print(0 or 0 or 3) # 输出3 
# 过程:

5. 同一运算符( is 和 is not)(身份运算符)

- 同一运算符

同一运算符用于比较两个对象的存储单元,实际比较的是对象的地址

运算符描述
isis 是判断两个标识符是不是引用同一个对象
is notis not 是判断两个标识符是不是引用不同对象

- is 与 == 区别:

  • is 用于判断两个变量引用对象是否为同一个,既比较对象的地址
  • == 用于判断引用变量 引用 对象的值是否相等,默认调用对象的 __eq__()方法
a=100000
b=100000
print(a==b) # True
print(id(a)==id(b)) # False id不同
print(a is b) # True False id不同

- 数字类型和字符串类型数据的缓存区(了解)

为了在程序中使用数据时,效率更高,ptyhon解释会在程序加载后,产生一个缓存区,缓存区中存放是常用的数据

  • 数字(整数):-5 ~ 255
    • 数字在255范围内,仅适用于字面量或字面量的运算才缓存,和变量相加等不适用于缓存区
  • 字符串:长度为小于20的字符串
    • 字符串仅适用于字面量或字面量的拼接,和变量的拼接等产生的都不适用于缓存区

- 整数缓存问题

当python对整数对象进行缓存,则有

a = 100
b = 100
c = 50
d = 50
print(a == b)  # True
print(id(a) == id(b))  # True id相同
print(a is b)  # True id相同
s1 = c + d
s2 = c + 50
s3 = 50 + 50
print(a is s1)  # True id相同
print(a is s2)  # True id相同
print(a is s3)  # True id相同


a = 1000
b = 1000
c = 500
d = 500
print(a == b)  # True
print(id(a) == id(b))  # True id相同
print(a is b)  # True id相同
s1 = c + d
s2 = c + 500
s3 = 500 + 500
print(a is s1)  # False id相同
print(a is s2)  # False id相同
print(a is s3)  # True id相同

命令行中执行:(范围为[-5, 256])

  • Python 仅仅对比较小的整数对象进行缓存(范围为[-5, 256])缓存起来,而并非是所有整数对象。

Pycharm 或者保存为文件执行:(范围是[-5,任意正整数])

  • 在 Pycharm 或者保存为文件执行,结果是不一样的,这是因为解释器做了一部分优化(范围是[-5,任意正整数])

- 字符缓冲问题

见字符串部分

总结

  1. is 比较两个对象的 id 值是否相等,是否指向同一个内存地址;
  2. == 比较的是两个对象的内容是否相等,值是否相等;
  3. 小整数对象 [-5,256] 在全局解释器范围内被放入缓存供重复使用;
  4. is 运算符比 == 效率高
  5. 变量None 进行比较时,应该使用 is

6. 运算符的补充(未讲)

1. 比较运算符连用

比较运算符可以连用,并且含义和我们日常使用完全一致。

a = 4
print(3<a<10)  # True 关系运算符可以连用

3. 加法操作(待定)

  1. 数字相加

    3+2 ==> 5

  2. 字符串拼接

    “3”+“2”==> “32”

  3. 列表、元组等合并

    [10,20,30]+[5,10,100] ==>[10,20,30,5,10,100]

4. 乘法操作 (待定)

  1. 数字相乘

    32 ==> 6

  2. 字符串复制

    “sxt”*3 ==> ”sxtsxtsxt”

  3. 列表、元组等复制

    [10,20,30]*3 ==> [10,20,30,10,20,30,10,20,30]

2. 位运算(了解)

运算符描述实例
&按位与运算符:参与运算的两个值,如果两个相应位都为1,则该位的结果为1,否则为0(a & b) 输出结果 12 ,二进制解释: 0000 1100
|按位或运算符:只要对应的二个二进位有一个为1时,结果位就为1。(a | b) 输出结果 61 ,二进制解释: 0011 1101
^按位异或运算符:当两对应的二进位相异时,结果为1(a ^ b) 输出结果 49 ,二进制解释: 0011 0001
~按位取反运算符:对数据的每个二进制位取反,即把1变为0,把0变为1 。~x 类似于 -x-1(~a ) 输出结果 -61 ,二进制解释: 1100 0011,在一个有符号二进制数的补码形式。
<<左移动运算符:运算数的各二进位全部左移若干位,由 << 右边的数字指定了移动的位数,高位丢弃,低位补0。a << 2 输出结果 240 ,二进制解释: 1111 0000
>>右移动运算符:把">>"左边的运算数的各二进位全部右移若干位,>> 右边的数字指定了移动的位数a >> 2 输出结果 15 ,二进制解释: 0000 1111
a = 0b11001
b = 0b01000
c = a|b
bin(c) #bin()可以将数字转成二进制表示
'0b11001' >>> bin(c&b)
'0b1000' >>> bin(c^b)
'0b10001' >>> a = 3
a<<2 #左移 1 位相当于乘以 2.左移 2 位,相当于乘以 4
12
a = 8
a>>1 #右移 1 位相当于除以 2.

5. 复合位运算(了解)

运算符描述示例等价于
<<=左移赋值a<<=2a = a<<2
>>=右移赋值a>>=2a = a>>2
&=按位与赋值a&=ba = a&b
|=按位或赋值a|=ba=a|b
^=按位异或赋值a^=ba = a^b

7. 运算符优先级

运算符位运算描述
**幂 (最高优先级)
~按位翻转【了解】
* / % //乘、除、取余数、取整除
+ -加法、减法
>> <<右移,左移运算符【了解】
&位 ‘AND’【了解】
^ |位运算符【了解】
<= < > >=比较运算符
== !=等于运算符
= %= /= //= -= += *= **=赋值运算符
is、is not身份运算符
in、not in成员运算符
not or and逻辑运算符

实际使用中,记住如下简单的规则即可,复杂的表达式一定要使用小括号组织。 1. 乘除优先加减 2. 位运算和算术运算>比较运算符>赋值运算符>逻辑运算符

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值