查看原文
其他

【Python教程】运算符

点击关注👉 Python架构师 2024-02-12



运算符:以1 + 2为例,1和2被称为操作数,“+” 称为运算符。


Python语言支持以下类型的运算符:


  • 算术运算符

  • 比较(关系)运算符

  • 赋值运算符

  • 逻辑运算符

  • 位运算符

  • 成员运算符

  • 身份运算符

  • 三目运算符


一、 算术运算符


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



Python中,有3种除法,一种除法是/:

>>> 10 / 33.3333333333333335


/除法计算结果是浮点数,即使是两个整数恰好整除,结果也是浮点数:

>>> 9 / 33.0


还有一种除法是//,也称为地板除,只取整数部分,余数被抛弃:

>>> 10 // 33


Python还提供一个余数运算,可以得到两个整数相除的余数:

>>> 10 % 31


如果想同时得到商和余数,可以用这个方法:

>>> divmod(10,3)(3, 1)

👉点击领取Python面试题手册

Python从入门到进阶知识手册


因为浮点数精度的问题,Python还存在一些计算方面的小问题,例如:

>>> 0.1+0.1+0.1-0.35.551115123125783e-17


什么?不是应该等于0吗?Python居然还有这么不为人知的一面?


要解决这个问题,可以导入decimal模块:

>>> from decimal import Decimal>>> Decimal('0.1')+Decimal('0.1')+Decimal('0.1')-Decimal('0.3')Decimal('0.0')>>> Decimal('0.1') / Decimal('0.3')Decimal('0.3333333333333333333333333333')
>>> from decimal import getcontext>>> getcontext().prec = 4 #设置全局精度>>> Decimal('0.1') / Decimal('0.3')Decimal('0.3333')


注意其中提供的数字是用字符串的形式传递给Decimal的。


二、 比较运算符


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



关于比较运算符,有一些有意思的题目:


1.下面三个选项哪个为True?


  • 5+4j > 2-3j

  • 'abc' < 'xyz'

  • (3, 2) < ('a', 'b')


2.请分别说出下面各项的值:


  • True == 1

  • False == 0

  • 3>2>1

  • 3>2>2

  • (3>2)>1

  • (3>2)>2


对于连续比较,Python是按这种机制解释的:

3>2>1 等于 (3>2) and (2>1)


相当于两个比较,然后用与&再结合起来。


三、 赋值运算符


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


注意对于 a /= b 之类的操作,等同于a = a / b, 而不是 a = b / a,方向一定不要搞反了。



四、 位运算符


按位运算符是把数字看作二进制来进行计算的。Python中的按位运算法则如下:下表中变量 a 为 60,b 为 13,二进制格式如下:

a = 0011 1100
b = 0000 1101
-----------------
a&b = 0000 1100
a|b = 0011 1101
a^b = 0011 0001
~a = 1100 0011


五、 逻辑运算符


Python语言支持逻辑运算符,但是没有其它语言中的&&和||语法,取而代之的是更加人性化的英文单词and or not(全部都是小写字母)。以下假设变量 a 为 10, b为 20:


六、 成员运算符


in 与 not in是Python独有的运算符(全部都是小写字母),用于判断对象是否某个集合的元素之一,非常好用,并且运行速度很快。返回的结果是布尔值类型的True或者False。



看个例子,传统的方式,我们判断某个集合里是否有某个元素时,都是使用for循环遍历一次集合,逐一进行比对,最后给出结果:


list1 = [1, 2, 3, 4, 5]a = 1flag = False
for i in list1: if i == a: flag = True break
if flag: print("a是list1的元素之一")else: print("a不是list1的元素")


事实上根本不用这么麻烦,直接使用in运算符就好了

list1 = [1, 2, 3, 4, 5]a = 1if a in list1: print("a是list1的元素之一")else: print("a不是list1的元素")


七、 身份运算符


这也是Python的特色语法(全部都是小写字母)。



注意is与比较运算符“==”的区别,两者有根本上的区别,切记不可混用:


is用于判断两个变量的引用是否为同一个对象,而==用于判断变量引用的对象的值是否相等!


举个例子:如果有两个人都叫张三。is比较的结果是false,因为他们是不同的两个人,==比较是True,因为他们都叫张三。

>>> a = [1, 2, 3]>>> b = a>>> b is a True>>> b == aTrue>>> b = a[:]>>> b is aFalse>>> b == aTrue


这里介绍一个常用的内置函数:id(),用它可以查看某个变量或者对象的内存地址,两个相同内存地址的对象被认为是同一个对象。

>>> a = 1>>> b = 2>>> id(a)1383969856>>> id(b)1383969888>>> c = 2>>> id(c)1383969888


但是,我们看看下面的例子:

>>> 3.0 is 9/3True>>> id(3.0)2434753652496>>> id(9/3)2434747931216>>> 3.0 is 9/3True>>> a = 3.0>>> id(a)2434747931216>>> b=9/3>>> id(b)2434753652496>>> a is bFalse>>> 1333 is 3999/3False>>> 1333.0 is 3999/3True>>> id(1333.0)2434751213232>>> id(3999/3)2434751213328>>> 133333.0 is 399999/3True>>>


可见Python的内部机制:在没有创建任何变量的时候,比如3.0 is 9/3 ,为了减少开销和内存使用,9/3直接复用了3.0的内存地址,所以它们的is比较为True。而当你分别将3.0赋值给变量a,9/3赋值给b,就分开了内存地址,不再是同一个对象了。


八、 三目运算符(三元表达式)


python中的三目运算符不像其他语言一般的表示方法:判定条件?为真时的结果:为假时的结果。


例如,C语言是这么写的:result = 5>3?1:0


在python中的格式为:为真时的结果 if 判定条件 else 为假时的结果


例如:True if 5>3 else False


九、 运算符优先级


下表列出了从最高到最低优先级的所有运算符。优先级高的运算符优先计算或处理,同级别的按从左往右的顺序计算(赋值运算符除外,它是按从右往左的顺序)





程序员技术交流群


扫码进群记得备注:城市、昵称和技术方向


 阅读更多


  1. 为什么Python没有main函数?
  2. ChatGPT崩了!全球宕机超12小时,打工人叫苦连天
  3. 【Python教程】第一个Python程序:Hello World
继续滑动看下一个

【Python教程】运算符

点击关注👉 Python架构师
向上滑动看下一个

您可能也对以下帖子感兴趣

文章有问题?点此查看未经处理的缓存