Python 学习笔记1:变量,运算符,数据类型及位运算
变量,运算符,数据类型及位运算
变量
在python中:
- 变量名可以包括字母,数字和下划线,但变量名不能以数字开头
- python变量名是大小写敏感的
- 有关注释:
单行注释(#):用于整行的注释
多行注释(’‘’ ‘’‘,“”“ ”“”):用于区间注释
print函数:
print(*objects, sep=’ ‘, end=’\n’, file=sys.stdout, flush=False)
- 将对象以字符串表示的方式格式化输出到流文件对象file里。其中所有非关键字参数都按str()方式进行转换为字符串输出;
- 关键字参数sep是实现分隔符,比如多个参数输出时想要输出中间的分隔字符;
- 关键字参数end是输出结束时的字符,默认是换行符\n;
- 关键字参数file是定义流输出的文件,可以是标准的系统输出sys.stdout,也可以重定义为别的文件;
- 关键字参数flush是立即把内容输出到流文件,不作缓存。
example:
item值与’another string’两个值之间用sep设置的参数&分割。由于end参数没有设置,因此默认是输出解释后换行,即end参数的默认值为\n。
shoplist = ['apple', 'mango', 'carrot', 'banana']
print("This is printed with 'sep='&''.")
for item in shoplist:
print(item, 'another string', sep='&')
输出值为:
This is printed with ‘sep=’&’’.
apple&another string
mango&another string
#carrot&another string
banana&another string
运算符
1.运算符
| 项目 | Value |
|---|---|
| 算术运算符 | +,-,*,/,// ,%,** |
| 比较运算符 | >,≥,<,≤,==,!= |
| 逻辑运算符 | and,or,not |
| 位运算符 | ~,&,|,«,»,^ |
| 三元运算符 | x if x<y else y |
| 其他运算符 | in(存在),not in(不存在),is(是),is not(不是) |
注意:
- is, is not 对比的是两个变量的内存地址
- ==, != 对比的是两个变量的值
- 比较的两个变量,指向的都是地址不可变的类型(str等),那么is,is not 和 ==,!= 是完全等价的。
- 对比的两个变量,指向的是地址可变的类型(list,dict,tuple等),则两者是有区别的。
运算符的优先级:
- 一元运算符优于二元运算符。例如3 ** -2等价于3 ** (-2)。
- 先算术运算,后移位运算,最后位运算。例如 1 << 3 + 2 & 7等价于 (1 << (3 + 2)) & 7。
- 逻辑运算最后结合。例如3 < 4 and 4 < 5等价于(3 < 4) and (4 < 5)。
基本的数据类型
整型(int), 浮点型(float),布尔型(bool)
dir(X) #通过 dir( X ) 和help( X ) 可看出 X 对应的对象里可用的属性和方法。
获取数据类型的信息
type(object) #获取类型信息
isinstance(object, classinfo) #判断一个对象是否是一个已知的类型。
type() 不会认为子类是一种父类类型,不考虑继承关系。
isinstance() 会认为子类是一种父类类型,考虑继承关系。
如果要判断两个类型是否相同推荐使用 isinstance()
1.整型(int)and 浮点型(float)
有时候我们想保留浮点型的小数点后 n 位。可以用 decimal 包里的 Decimal 对象和 getcontext() 方法来实现。
import decimal
from decimal import Demical
Python 里面有很多用途广泛的包 (package),用什么你就引进 (import) 什么。包也是对象,也可以用上面提到的dir(decimal) 来看其属性和方法。比如 getcontext() 显示了 Decimal 对象的默认精度值是 28 位 (prec=28)。
如果想要保留四位小数,可以使用 getcontext().prec 来调整精度:
decimal.getcontext().prec = 4
2.布尔型(boolen)
布尔 (boolean) 型变量只能取两个值,True 和 False。当把布尔型变量用在数字运算中,用 1 和 0 代表 True 和 False。
除了直接给变量赋值 True 和 False,还可以用 bool(X) 来创建变量,其中 X 可以是
基本类型:整型、浮点型、布尔型
容器类型:字符串、元组、列表、字典和集合
bool 作用在基本类型变量:X 只要不是整型 0、浮点型 0.0,bool(X) 就是 True,其余就是 False。
bool 作用在容器类型变量:X 只要不是空的变量,bool(X) 就是 True,其余就是 False。
确定bool(X) 的值是 True 还是 False,就看 X 是不是空,空的话就是 False,不空的话就是 True。对于数值变量,0, 0.0 都可认为是空的。对于容器变量,里面没元素就是空的。
3.数据类型的转换
- 转换为整型 int (X, base=10)
- 转换为字符串 str (object=’ ')
- 转换为浮点型 float(X)
位运算
1.原码、反码和补码
二进制有三种不同的表示形式:原码、反码和补码,计算机内部使用补码来表示。
- 对于正数:原码=反码=补码
- 对于负数:原码(二进制表示)、反码(原码符号位不变,其余位取反)、补码(反码+1)
位运算中的异或操作:满足交换律和结合律
2.通过位运算快速计算
- 通过 <<,>> 快速计算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
- 通过 ^ 快速交换两个整数。
a ^= b
b ^= a
a ^= b
- 通过 a & (-a) 快速获取a的最后为 1 位置的整数。
00 00 01 01 -> 5
&
11 11 10 11 -> -5
00 00 00 01 -> 1
00 00 11 10 -> 14
&
11 11 00 10 -> -14
00 00 00 10 -> 2
3.利用位运算实现整数集合
一个数的二进制表示可以看作是一个集合(0 表示不在集合中,1 表示在集合中)。
比如集合 {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)
标记文本
删除文本
引用文本
H2O is是液体。
210 运算结果是 1024.
leetcode 习题136:只出现一次的数字
给定一个非空整数数组,除了某个元素只出现一次以外,其余每个元素均出现两次。找出那个只出现了一次的元素。
相关代码如下:
class Solution(object):
def singleNumber(self, nums):
"""
:type nums: List[int]
:rtype: int
"""
a=0
for i in nums:
a^=i
return a
参考文献
【1】: https://mp.weixin.qq.com/s/DZ589xEbOQ2QLtiq8mP1qQ
【2】: https://github.com/datawhalechina/team-learning
545

被折叠的 条评论
为什么被折叠?



