六、运算符和表达式
Python的运算符包括:
- 算术运算符
- 位运算符
- 关系运算符
- 逻辑运算符
表达式是由各种类型的数据和运算符组成的有意义的式子。
1、算术运算符和算术表达式
(1)整数运算
① 运算顺序
- Python算术运算的规则与常规算术的规则相同。
② 长度不受限制
- 与其他大多数编程语言不同,Python对整数的长度没有限制,可以执行数十位甚至数百数千位的整数运算。
如:27**100
(2)浮点数运算
-
所有适合用于整数的算术运算符都可用于浮点数,包括%(求余)和//(整除)。
-
例如:
① 溢出
-
与整数不同,浮点数存在上限和下限,超出上限或下限将导致溢出错误。这种限制与不同的计算机系统有关。
-
应将此问题考虑在内,以避免溢出。
-
例如:
② 精度有限
-
在计算机中,数字用二进制表示,但并非所有的浮点数都可用二进制精确表示。
-
如:
-
对多数程序来说,小数点之后包含17位足够了,但如果执行大量计算时小误差会累计为大误差,当需要进行精密计算时,必须考虑细微的浮点数误差,避免它们累积出大误差。
-
一般而言,应优先考虑使用整数,因为它们更精确且不会溢出(Python中)。
有关浮点数信息(本机安装系统):
(3)复数运算
除了//和%运算符之外,其他用于整数的算术运算符都可用于复数。
复数可以分离实数部分和虚数部分
- 复数.real
- 复数.imag
复数的共轭
- 复数.conjugate()
(4)常用内置数学函数
例如
(5)math库中常用的数学函数
(6)其他内置数学模块简介
- cmath模块—除具备math模块的功能之外,还支持复数运算
- decimal模块—支持固定精度的浮点数计算
- fractions模块—可生成分数,或将浮点数转换为分数
- 例如:
(7)random库中常用的函数
例如:随机数库的使用
例如:调用seed()函数,重置随机种子
• 当设定相同的种子后,每次调用随机函数后生成的随机数都是相同的。这就是随机种子的作用。
说明:
- 因为计算机是一个确定设备,不能生成真正的随机数。所以,由计算机产生的随机数都是由一个种子开始的伪随机序列。
- 相同的随机种子产生相同的伪随机数序列,也有利于程序的验证执行。
- 若未设定随机数种子,则默认采用系统时钟作为随机数种子。
2、位运算符及表达式
位运算符是对其操作数按其二进制形式逐位进行运算,参加位运算的操作数必须为整数。
位运算—按位取反(~)
- 运算规则:单目运算符,对一个二进制数按位取反。
例如:
0o25:00010101
~0o25:11101010
说明:计算机中,负数是以正值的补码形式表示的(补码=反码+1),因此:
位运算—移位(<<、>>)
左移运算(<<)
- 左移后,低位补0,高位左移(因为Python整型数据无界限,与C/C++不同,C/C++高位舍弃)。
右移运算(>>)
右移后:
- 低位:舍弃
- 高位:
- 无符号数:补0
- 有符号数:补“符号位”
例如:
位运算—按位与(&)
运算规则:
两个操作数进行按位与:
- 若对应位都是1,则结果该位为1,
- 若对应位有一个为0或都为0,则结果该位为0。
例如:
用途:
- 将某一位置0,其他位不变。
例如:将变量a的最低位置0: a = a & 0xfe; ;(0xfe:1111 1110) - 取指定位。
例如:取出a的低字节,置于c中:c=a & 0xff; (0xff:1111 1111)
位运算—按位异或(^)
运算规则:
两个操作数进行异或:
- 若对应位相同,则结果该位为 0,
- 若对应位不同,则结果该位为 1,
例如:计算 0o71^0o52
用途举例:使特定位翻转(与0异或保持原值,与1异或取反)
例如:要使 01111010 低四位翻转:
位运算—按位或(|)
运算规则
两个操作数进行按位或:
- 若对应位其中有一个是1,则结果该位为1,
- 若对应位都为0,则结果该位为0。
例如:
用途:将某些位置1,其他位不变。
例如:将变量 a 的低字节置 1 :
a = a | 0xff;
例如:位运算表达式
3、关系运算符和关系表达式
例如:
4、逻辑运算符和逻辑表达式
基本逻辑运算符的真值表
例如:
Python逻辑运算符的说明:
- 在使用逻辑运算符时,最需要注意的一点是短路逻辑(或叫做惰性求值),它表达的意思是:逻辑运算是自左向右进行的,如果左边已经决定结果,就不会再去做右边的计算。
- 此外,在Python语言中,非“0”的数值或者字符串被视为“真”,表示“True”。
逻辑非—not
- 结果只有 True和False;
- not可以对符号右侧的值进行非运算。对于布尔值,非运算会对其进行取反操作,True变False,False变True;对于非布尔值,非运算会先将其转换为布尔值,然后再取反。
- 字符串:有内容为True,空字符串为False
- 数字:0为False ,其它为True
例3-9:
逻辑与—and
- and两侧的值为布尔值时,结果只有True和False,当两侧都为True 时,结果才为 True ,否则为False。
- 当and两侧的值为数字、字符串或布尔值混合时
- 若左值为非0、非空串或True时,结果取右值
- 若左值为0、空串或False时,结果取左值
例3-10:
逻辑或—or
- or两侧的值布尔值,结果只有True和False,当两侧值都为False,结果才为False。
- 当or两侧的值为数字、字符串或布尔值混合时
- 若左值为非0、非空串或True时,结果取左值
- 若左值为0、空串或False时,结果取右值
例3-11:
5、各类运算符的优先级
• 算术运算符
• 位运算符
• 关系运算符
• 逻辑运算符
6、常用类型转换函数
类型转换是常用功能,Python提供了很多简化这种工作的内置函数。
常用的有:
- float
- int
- str
- round
- complex
(1)浮点数转换函数
使用函数float(x)将数字或数字形式的字符串转换为浮点数。
例如:
(2)整数转换函数
使用函数int(x)将数字或整数数字形式的字符串转换为整数。
例如:
(3)字符串转换函数
函数str(n)将指定的数字转换为相应的字符串。
例如:
隐式类型转换:
- 有时Python会自动在数值类型之间转换,而不要求显式地调用转换函数。
- 三种类型存在一种逐渐“扩展”的关系:
整数-> 浮点数-> 复数 (整数是浮点数特例,浮点数是复数特例) - 不同数字类型之间可以进行混合运算,运算后生成结果为最宽类型
例如:
(4)舍入函数
函数round(x)——标准圆整方式(将小数部分.5的数字圆整到最接近的偶数—被称为银行家圆整。因此,小数部分为.5的数字可能向下圆整,也可能向上圆整)。
例如:
(5)复数转换函数
函数complex(x)—将整数、浮点数或数字形式的整数、浮点数字符串转换为复数。
例如:
七、赋值语句
变量第一次赋值,同时获得类型和“值”
- Python是动态的强类型语言
- 不需要显式声明,根据“值”确定类型
- 以“引用”的方式实现赋值
格式:
功能:定义新的变量;让已定义的变量指向特定值。
例如:
可将任何值赋给变量,包括其他变量的值。
例如:
2、Python定义变量的方式与其他高级语言的区别
- Python与其他高级语言定义变量的方式及内部原理有很大不同。例如:定义一个整型变量并赋值1。
C++描述:int i=1;
Python描述:i=1
- Python根据变量的值自动判断变量的类型,程序员不需要关心变量究竟是什么类型,只需知道创建的变量中存放了一个数,以后的工作只是对这个数值进行操作,Python会对这个数的生命周期负责。
- 更重要的是,C或Java只是创建了一个int型的普通变量;而Python创建的是一个整型对象,且Python自动完成了整型对象的创建工作,不再需要像C++那样通过构造函数创建。
- Python内部没有普通类型,任何类型都是对象。如果C或Java需要修改变量i的值,只需重新赋值即可,但Python并不能修改对象i的值。
例3-12:测试两个i是否为同一对象
3、变量如何引用值
- 对于x=expr这样的赋值语句,可理解为:让x指向表达式的值。
- 注意:expr可以是任何结果为值的Python表达式。
如执行下列赋值后的内存状况:
4、复合赋值运算
+=(加赋值) -=(减赋值)
*=(乘赋值) /=(除赋值)
%=(求余赋值) **= (乘方赋值)
<<=(左移位赋值) >>=(右移位赋值)
&=(按位与赋值) ^=(按位异或赋值)
|=(按位或赋值)
复合赋值运算符的含义如下:
例如:
5、多重赋值
- 一次给多个变量赋相同的值。
例如:
6、多元赋值
- 同时给多个变量赋不同的值;
- 等号左右两边都以元组的形式出现(有无圆括号相同)
例如:
- 使用多元赋值实现两个变量的值互换
整理不易🚀🚀,关注和收藏后拿走📌📌欢迎留言🧐👋📣✨
欢迎专注我的公众号:AdaCoding 和 Github:AdaCoding123