python3基础篇(三)——运算符

python3基础篇(三)——运算符

1、阅读这篇文章我能学到什么?
  这篇文章将为你介绍python3运算符的使用。

——如果你觉得这是一篇不错的博文,希望你能给一个小小的赞,感谢您的支持。

1 python3运算符

  同其他语言一样,python3也具有多种运算符。python3的7类运算符如下:

运算符类别 运算符
算术运算符 +、-、*、/、%、**、//
关系运算符 ==、!=、>、<、>=、<=
赋值运算符 =、+=、-=、*=、/=、%=、**=、//=、:=
位运算符 &、|、^、~、<<、>>
逻辑运算符 and、or、not
成员运算符 in、not in
身份运算符 is、is not

2 算术运算符

算术运算符 描述
+ 求和
- 求差或求相反数
* 求积
/ 求商
% 取模
** 幂运算
// 取整除,结果向下(指往x轴负方向靠拢)

代码示例:

a = 10
b = 2

print(a + b)
print(a - b)
print(a * b)
print(a / b)
print(a % b)            #取模
print(a ** b)           #幂运算,10^2
print(a // b)           #求商且结果取整

print(-a)               #取a的负数
print(1 // 3)           #向下取整
print(-1 // 3)

运行结果为:

12
8
20
5.0
0
100
5
-10
0
-1

3 关系运算符

关系运算符 描述
== 判等
!= 判不等
> 大于
< 小于
>= 大于等于
<= 小于等于

代码示例:

a = 10
b = 2

print(a == b)
print(a != b)
print(a > b)
print(a < b)
print(a >= b)
print(a <= b)

运行结果为:

False
True
True
False
True
False

4 赋值运算符

赋值运算符 描述
= 直接赋值
+= 加法赋值
-= 减法赋值
*= 乘法赋值
/= 除法赋值
%= 取模赋值
**= 幂赋值
//= 取整除赋值
:= 海象赋值(python3.8新增特性),使得python3开始支持在表达式内赋值。(c/c++的=赋值符号就可以在表达式内赋值)

代码示例:

a = 10
b = 3

a = b
print(a)
a += b
print(a)
a -= b
print(a)
a *= b
print(a)
a /= b
print(a)
a = 8
a %= b
print(a)
a **= b
print(a)
a //= b
print(a)

c = (n := a) * b                #海象运算符,是的可以在表达式内赋值
print(c)

运行结果:

扫描二维码关注公众号,回复: 10713045 查看本文章
3
6
3
9
3.0
2
8
2
6

5 位运算符

位运算符 描述
& 按位与运算
| 按位或运算
^ 按位异或运算
~ 按位取反运算
<< 左移位运算
>> 右移位运算

代码示例:

a = 10
b = 9

print(bin(a))               #以二进制输出
print(bin(b))

print(bin(a & b))
print(bin(a | b))
print(bin(a ^ b))
print(bin(~a))
print(bin(a << 1))
print(bin(b >> 1))

运行结果:

0b1010
0b1001
0b1000
0b1011
0b11
-0b1011
0b10100
0b100

  解释下为什么10按位取反的二进制结果是-0b1011,是因为10是有符号数,其反码是负数,而负数在计算机中是以补码形式存储的的(补码就是反码再加1)。

6 逻辑运算符

逻辑运算符 描述
and 逻辑与,x and y 当x为真时结果为y,当x为假时结果为x
or 逻辑或,x or y 当x为真时结果为x,当x为假时结果为y
not 逻辑非,not x 当x为真时结果为False,当x为假时结果为True

代码示例:

#以下类型在python3中都判为逻辑假,其他为真
if 0:                      #整形0为假
    print(True)
else:
    print(False)

if 0.0:                    #浮点型0.0为假
    print(True)
else:
    print(False)

if None:                    #类似c/c++中的NULL,为假
    print(True)
else:
    print(False)

str = ""                    #空字符串为假
if str:
    print(True)
else:
    print(False)

Set = ()                    #空元组为假
if Set:
    print(True)
else:
    print(False)

Tuple = []                  #空列表为假
if Tuple:
    print(True)
else:
    print(False)

Set = set()                 #空集合为假
if Set:
    print(True)
else:
    print(False)

dic = {}                     #空字典为假
if dic:
    print(True)
else:
    print(False)

#逻辑与
#x为真,时输出y的值
x = 1
y = 3
print(x and y)               #x为真,输出y的值

x = 0
y = 2
print(x and y)               #x为0是假,输出x

x = ()
y = 2
print(x and y)               #x为空元组是假,输出x

#逻辑或
x = 1
y = 3
print(x or y)                #x为1是真,输出x的值

x = 0
y = 2
print(x or y)                #x为0是假,输出y的值

x = []
y = 2
print(x or y)                #x为空列表是假,输出y的值

x = 0
print(not x)                 #x为0是假,输出True

x = 1
print(not x)                 #x为1是真,输出False

运算结果:

False
False
False
False
False
False
False
False
3
0
()
1
2
2
True
False

  python3中将几类判定为假:0,0.0,None,"",(),[],set(),{},其他为真。简单记忆就是数值为0时,None时,数据类型为空时为假。

7 成员运算符

成员运算符 描述
in 判定存在其中
not in 判定不存在其中
Tuple = (1, 2, 3)
List = [1, 2, 3]
Set = {1, 2, 3}
Dictionary = {"1":1, "2":2, "3":3}

print(1 in Tuple)
print(1 in List)
print(1 in Set)
print("2" in Dictionary)            #判断字典中是否存在某个键値

运算结果:

True
True
True
True

8 身份运算符

身份运算符 描述
is 判断是否引用自一个对象
is not 判断是否不是引用自同一个对象

  说白了就是比较内存地址是否相同。==用于比较变量内存中的值是否用,isis not用于比较变量的内存地址是否相同。用id()函数可以获取对象的地址。

'''
python解释器为了节省内存,进行了一些优化。小数字缓存池是事先创建好的(不管你用不用它都存在
,当变量值为区间[-5, 256]内时,变量的地址都是固定的小整数缓存池中固定的地址。所以当多个变量的
值相同且位于小整数区间[-5, 256]区间内时,他们的地址都是固定相同的。
'''
#观察地址
a = -6                  #多次运行地址会变
b = -5                  #多次运行地址不变
c = 256                 #多次运行地址不变
d = 257                 #多次运行地址会变
print(id(a))
print(id(b))
print(id(c))
print(id(d))

x = -5                  #小整数范围内
print(id(x))            #对应小整数缓存池内固定地址
x = -6                  #不在小整数范围内
print(id(x))            #改变变量内的值,变量地址变了
x = -7                  #再次改变变量值,不在小整数范围内
print(id(x))            #改变变量内的值,变量地址又变了

a = 0
b = 0
c = 1
print(a is b)           #地址相同,是引用自一个对象
print(a is c)           #地址不相同,不是引用自一个对象
print(a is not a)
print(a is not c)

运算结果:

1932188604144
140713282360800
140713282369152
1932218591312
140713282360800
1932188604144
1932188603952
True
False
False
True

9 运算符优先级

运算符优先级 描述
** 指数(最高优先级)
~ + - 这里的是一元运算符
* / % //
+ - 二元运算符
>> << 移位运算符
& 位与
^ | 位运算
>= <= > < 比较运算
== != 判等
= %= /= //= -= += *= **= 赋值运算
is、is not 身份运算符
in、not in 成员运算符
and or not 逻辑运算符(优先级最低)
#建议尽量多加括号,不要太相信自己或别人对优先级的记忆,应尽量将表达式写得看起来没有歧义。
a = 1
b = 0
print(a + b << 1)           #等同于(a + b) << 1

c = 2
c *= b + a
print(c)                    #等同于c = c * (b + a)

运算结果:

2
2
发布了30 篇原创文章 · 获赞 95 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/qq_42475711/article/details/105446156
今日推荐