一、变量、运算符与数据类型
1.注释
- #表示注释,作用于整行
- ‘’’ ‘’’ 或者 “”" “”" 表示区间注释,在三引号之间的所有内容被注释
2.运算符
算数运算符 | 实例 |
---|---|
// 整除 | 3 // 4 |
% 取余 | 3 % 4 |
** 幂级数 | 2 ** 3 |
位运算符
每一个数字都可以写成二进制的形式,分别对每一位进行运算
位运算符 | 实例 |
---|---|
~ | 按位取反 |
& | 按位与 |
^ | 按位或 |
^ | 按位异或 ( 相同取0,不同取1 ) |
<< | 左移 |
>> | 右移 |
注意:按位取反并不会得到该数的相反数
python中bin一个负数(十进制表示),输出的是它的原码的二进制表示加上个负号。
print(bin(3)) # 0b11
print(bin(-3)) # -0b11
其他运算符
- is, is not 对比的是两个变量的内存地址
a = ["hello"]
b = ["hello"]
print(id(a))
id(a)=140512349757128
print(id(b))
id(b)=140512349757192
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的,上式中的a、b是列表。
运算符的优先级
- 一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)。
- 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7。
- 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)。
3.变量与赋值
- 变量名可以包括字母、数字、下划线、但变量名不能以数字开头。
- Python 变量名是大小写敏感的,foo != Foo。
4.数据类型与转换
类型 | 名称 | 示例 |
---|---|---|
int | 整型 <class 'int'> | -876, 10 |
float | 浮点型<class 'float'> | 3.149, 11.11 |
bool | 布尔型<class 'bool'> | True, False |
5.print函数
print(*objects, sep=' ', end='\n', file=sys.stdout, flush=False)
- 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按
str()
方式进行转换为字符串输出; - 关键字参数
sep
是实现分隔符,比如多个参数输出时想要输出中间的分隔字符; - 关键字参数
end
是输出结束时的字符,默认是换行符\n
; - 关键字参数
file
是定义流输出的文件,可以是标准的系统输出sys.stdout
,也可以重定义为别的文件; - 关键字参数
flush
是立即把内容输出到流文件,不作缓存。
二、位运算
1.原码反码与补码
二进制有三种不同的表示形式:原码、反码和补码
注意:这只是二进制数的三种表现形式,并不影响数本身的值
计算机内部使用补码来表示。
2.按位运算
- 按位左移操作 <<
num << i
将num
的二进制表示向左移动i
位所得的值。
00 00 10 11 -> 11
11 << 3
---
01 01 10 00 -> 88
- 按位右移操作 >>
num >> i
将num
的二进制表示向右移动i
位所得的值。
00 00 10 11 -> 11
11 >> 2
---
00 00 00 10 -> 2
3. 利用位运算实现快速计算
通过 <<
,>>
快速计算2的倍数问题。
n << 1 -> 计算 n*2
n >> 1 -> 计算 n/2,负奇数的运算不可用
n << m -> 计算 n*(2^m),即乘以 2 的 m 次方
n >> m -> 计算 n/(2^m),即除以 2 的 m 次方
1 << n -> 2^n
4. 利用位运算实现整数集合
集合 {1, 3, 4, 8}
,可以表示成 01 00 01 10 10
而对应的位运算也就可以看作是对集合进行的操作。
例如:
元素与集合的操作:
a | (1<<i) -> 把 i 插入到集合中
a & ~(1<<i) -> 把 i 从集合中删除
a & (1<<i) -> 判断 i 是否属于该集合(零不属于,非零属于)
集合之间的操作:
a 补 -> ~a
a 交 b -> a & b
a 并 b -> a | b
a 差 b -> a & (~b)