Python运算符

本文详细介绍了Python中的各种运算符,包括算术运算符(如加减乘除、取余和幂运算)、赋值运算符、比较运算符、逻辑运算符、成员运算符、身份运算符,以及位运算符(如按位与、或、异或、取反、左移和右移)。还涉及了运算符优先级和数据在内存中的存储结构,以及负数的原码、反码和补码概念。
摘要由CSDN通过智能技术生成

2.4运算符

2.4.1算术运算符
加法 +
减法 -
乘法 *
除法	
	/  结果是浮点类型的  除不尽 商会有小数
	// 结果是整型的  对商进行向下取整 
		<=商且最接近于商的整数 称为向下取整
取余数 
	%  A除以B除不尽 会余下数据 这个余下的数据就是余数
	11除以3得3余2  这个2就是余数
	11 % 3 = 2
求幂数 
	**  比如x**y,求x的y次方 
	y如果是正整数N  对x求幂数次方
	y是1/N 小数格式  对x进行开方
	
	x = 2
	y = 3
	x ** y = 2的3次方 = 8
	
	x = 27
	y = 1/3
	x ** y = 27的三分之一次方 
	开方的时候结果是浮点型的  8**(1/2)

算术运算符的优先级别:

** > 符号 > *、/、//、% > 加减

提高表达式的优先级使用小括号()包含

2.4.2 赋值运算符
赋值表达式(海象运算符)

把某个赋值表达式的结果再赋值给另外一个变量,这种格式称为赋值表达式比如在其他语言中支持y = (x = 17 %3)
解读:先计算x的结果,再把x的值赋值给y
但是这个写法在Python中不支持,Python变更成y = (x := 17 % 3)这里其实也是同时定义了两个变量,只不过不同于a,b=11,22的是这个赋值表达式在定义变量的时候,某个变量的值参与另外一个变量定义的运算

2.4.3比较运算符

又称为关系运算符,用于对比两个表达式结果的关系,运算符有:

>  判断前者是否大于后者
>= 判断前者是否大于或者等于后者
<  判断前者是否小于后者
<= 判断前者是否小于或者等于后者
== 判断两者是否相等
!= 判断两者是否不相等

算术运算符的优先级别高于比较运算符

介绍字符串数据的比较,本质比较的是字符对应的十进制数据,比较规则是相同位置的字符进行比较,直到比较出结果

比如
s1 = 'hello'
s2 = 'head'
res = s1 > s2  这个结果是真还是假???

第一次比较是 h 对 h
第二次比较是 e 对 e
第三次比较是 l 对 a   成立
因此结果为真
2.4.4 逻辑运算符

逻辑运算符的优先级别是低于比较运算符的

逻辑运算符是来关联表达式的逻辑关系的,逻辑关系是有三种的

  1. 逻辑与(and)

    连接的逻辑关系是一个并且的关系,这两个表达式同时成立,结果才是成立的

    True and True = True
    True and False = False
    False and False = False
    False and True = False
    

    总结and的运行机制:

    and是具备有短路原则,左边表达式不成立,右边表达式不被执行

    执行机制是左边表达式成立,结果取决于右边表达式;左边表达式不成立,结果就是左边表达式的值

  2. 逻辑或(or)

    连接的逻辑关系是或者的关系,两个表达式中有一个成立,结果就是成立的

    True or True = True
    True or False = True
    False or True = True
    False or False = False
    

    or也是具备短路原则的,左边表达式成立,右边不执行

    执行机制:左边表达式成立,结果就是左边表达式的;左边表达式不成立,解决取决于右边表达式的值

  3. 逻辑非(not)

    对逻辑关系取反,逻辑关系结果为真,not之后设定为假;逻辑结果为假,not之后设定为真

    not True = False
    not False = True
    

优先级别的问题:

not > and > or

2.4.5成员运算符

成员运算符是用来判定数据是否是某个容器型数据中的元素

数据 in 容器型数据
	把数据作为一个整体 判断是否在容器中
数据 not in 容器型数据
	把数据作为一个整体 判断是否不在容器中
2.4.6身份运算符

判定两个数据的地址在内存中是否是一致的

数据1 is 数据2
 	判断两个数据在内存中的地址是否一致
数据1 is not 数据2
	判断两个数据在内存中的地址是否是不一致的

启动程序,维护程序运行的数据存储于内存中,当程序结束,数据在内存中被释放了

内存也分为不同的区域,不同的区域存储的数据是不一样额,数据的生命周期也是不一样的,区域有:

  1. 栈区

  2. 堆区

  3. 常量池

    常量池中存储的是数值类型以及字符串类型的数据

    特点:获取数据时检查数据是否在常量池中存在,如果存在的话直接根据地址获取数据,如果不存在,先分配空间添加数据,再把数据的地址赋值给变量

    生命周期:当程序结束的时候才会释放

  4. 静态池

    存储全局变量【直接在py文件中定义的变量称为全局变量】

    生命周期:当程序结束的时候才会释放

  5. 方法区

2.4.7位运算符

位运算符的运算机制是对二进制数据进行计算的,因为直接对二进制进行数据计算,因此计算效率非常高

&  按位与
	  相同位置的数据,只要有一个是0,该位置的结果为0
|  按位或
	  相同位置的数据,只有有一个是1,该位置的结果为1
^  按位异或
	  相同位置的数据一样,该位置位0,否则为1  【相同为0 不同为1】
	  一个数与相同的数异或两次结果是其本身  【交换两个变量的值】
	  
	  交换两个变量的值  a = 10  b = 20 ====> a = 20 b = 10
	  [使用至少3种方法交换两个变量的值]  ***** 
	  -- 方式1:大众的方式 借助第三方变量
          c = a
          a = b
          b = c
      -- 方式2:采用异或 【不用第三方变量】
      	  a = a ^ b  # 10 ^ 20
      	  b = a ^ b  # 10^20 ^ 20  ====> 10
      	  a = a ^ b  # 10^20^10   ====> 20
      -- 方式3:采用距离问题  【不采用第三方变量】
      	  a = a + b  # 10 + 20
      	  b = a - b  # 10 + 20 - 20 ====> 10
      	  a = a - b  # 10 + 20 - 10 ====> 20
      -- 方式4:Python独有的方法
      	 a, b = b, a  ====> a, b = 20, 10
	  
~  按位取反
	   该位置上的数据0变1, 1变0
>> 按位右移
	   将二进制数据向右移动N位,左边空出
	   如果是正数 左边补0
	   如果是负数 左边补1
	   规律:
	   	  数值//(2**N)
<< 按位左移
		将二进制数据向左移动N位,右边空出补0
		规律:
			数值*2**N

运算符都是针对于位【二进制数据中一个0或者一个1称为一位】的

在计算机发展过程中,根据数据计算的发展的一个历程,二进制形态出现过三种:原码/反码/补码。 现在的计算机中存储处理二进制数据的形态是补码

对于正数来说,三码合一,格式是一样的, 原码样子就是将十进制数据按照规则转化为二进制的格式

负数的原码: 在正数的基础上将最高位置为1,则表示这个数据为负数。【二进制的最高位为符号位:0表示正数 1表示负数】,之前接触过进制转换,数据大小不一样,获取的二进制数据中位的个数不一样,怎么确定哪个是最高位??? 【计算机中数据存储时开辟的最小单元是字节,1个字节是8位,位数一确定 最高位就确定了】,比如常规的数据开启的字节数是4个字节 0000 0000 0000 0000 0000 0000 0000 0001

0000 0000 0000 0000 0000 0000 0000 1010 [10]

1000 0000 0000 0000 0000 0000 0000 1010 [-10]

负数的反码:在负数原码的基础上,除了符号位,0变1,1变0

​ -10的反码1111 1111 1111 1111 1111 1111 1111 0101

负数的补码: 在负数反码的基础上加1

​ -10的补码 1111 1111 1111 1111 1111 1111 1111 0110

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值