python字符串进行位运算_python训练营:注释、运算符、数据类型与位运算

天学习的内容整理成脑图如下,其中带☆的是需要重点掌握的模糊知识点,需要加强训练和记忆。

ff4131671cff7d3174e28542f920a8a5.png

二、具体学习内容

2.1 注释

2.1.1 多行注释

1a73b2711929d6b7f4c30f5da528d55a.png

2.1.2 长字符串注释

f2cc0002e09c351d154dfdaf56aa0551.png

2.2 运算符

2.2.1 算术运算符

7057e0c2dc1e18dab5ec5c1035401fe3.png

2.2.2 比较运算符

aaa2e15e3c72af3dad9cf050fd8be2a8.png

2.2.3 逻辑运算符

01fcd0235ad64f99b1233421d6c25eaa.png

2.2.4 位运算符

5f33148d7f41628d0b54c312716253df.png

2.2.5 三元运算符

295b70045236f306adad2bc2801afc1b.png

以上三元运算符等价于以下代码

83504574c9532cceb843ae165bd66ec4.png

2.2.6 其他运算符

2.2.6.1 in和not in

f86b1882eb099ee572f6154921498860.png

2.2.6.2 is和not is

156499be89f3b15936a1ebcc75970803.png

82ec50821f7e85446bfb19647168d3dd.png

注意:

  • is, is not 对比的是两个变量的内存地址
  • ==, != 对比的是两个变量的值
  • 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
  • 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。

2.2.7 运算符的优先级

  • 一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)。
  • 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7。
  • 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)。

口诀:算移位逻(SIVL)

0a1b0c7c3c25855ae9e0a442d2379264.png

2.3. 变量和赋值

  • 在使用变量之前,需要对其先赋值。
  • 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
  • Python 变量名是大小写敏感的,foo != Foo。

6833fb416f709037fcd3f8ae956dc5f0.png

2.4. 数据与类型转换

2.4.1 整型

a9b933a787efa5f78393663d011dca3b.png

6e2980a2fd4d3e88f55d81ee3db4ad87.png

2.4.2 浮点型

082426544814cc6c042418beae548e4a.png

2.4.3 布尔型

455f588b8a89a37bae43f1b82e93552c.png

2.4.5 类型转换

ab25ad577a399c618ae1c79123890702.png

2.4.6 print函数

40a1d0f864cb605bb191add353114e30.png

2.5 位运算

2.5.1 原码、反码和补码

89d5e9ad0d6e59a5eb27ee2fb3b54e50.png

2.5.2 按位运算

14ec1fd8a7e48ed721a51479277166f8.png

2.6.3 利用位运算实现快速计算

fd3c25cea56045f200a5105abd883f7e.png

2.6.4 利用位运算实现整数集合

83ef82c6bbae54d5510e633e1a971e10.png

示例代码:

be0aeeb8deebe0dfe94e2e53f209569e.png

我们从结果可以看出:

Python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号,巨坑。

Python中的整型是补码形式存储的。

Python中整型是不限制长度的不会超范围溢出。

所以为了获得负数(十进制表示)的补码,需要手动将其和十六进制数0xffffffff进行按位与操作,再交给bin()进行输出,得到的才是负数的补码表示。

三、学习问题和解决方法记录

最大的问题可能是网速的问题了,解决方案就是第一次启动的时候耐心等待,如果实在不行,多切换几个网络,电信网不行就用校园网,再不行就换成4G热点。

注意is/not is的用法,这两个运算符其实是用来判定两个变量的地址是否一致的,如果是比较小的变量,比如小数字和字符串,python是会将不同变量名指向同一个地址的(也就是同一个对象)。但是如果是不同的列表或者其他容器的话,一般来说是不相等的,因为python会另外分配空间给这些变量。

总的来说,今天的内容比较基础,不过也学到了不少新知识,比如:

  1. 用Decimal对象来控制浮点型数值的位数等参数
  2. 使用位运算的一系列骚操作(有点像one-hot编码)来实现快速计算

还有些知识需要巩固,比如:

  1. 内存中存放数据的方式
  2. python中给小整数和字符串的内存分配(is/not is判断)
  3. 负数补码的计算方法(反码+1)
  4. 运算符的优先级。可以通过口诀"SIVL"进行记忆,即S=算术 I=移位运算 V=位运算 L=逻辑运算。
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值