常量

字面常亮是指单独出现的数字、字符串等,占用解释器里的一块内存地址,通常不会单独出现。

如果想指定一些不被特殊处理的字符串,例如正则表达式,转义序列等,就需要通过在字符串前面附加r或者R来指定自然字符串

变量

变量是指解释器中一段内存的名称,python 中变量都是引用, 引用对象存储在 堆空间 中。

数据类型

Python强类型的(动态)语言。强类型是指明确对象类型的语言,动态是指变量可重新复制为别的数据类型。
数据类型是用来约束数据的。数据类型分为原始类型和复合类型,原始类型是指 intfloatbyte等基础类型,复合类型是指由其他原始类型组合起来的类型.例如listdict等。

运算符

  • 算术运算符

+ - * / % ** //(取整除)

& 按位与

| 按位或

^ 按位异或

~ 按位取反 ~x = -(x+1)

正数的补码和反码都是其本身,但是前面加上正数的符号位"0"

 负数的符号位是"1"
 负数的补码是:符号位不变,其余各位求反,末位加1
 负数的反码是:符号位不变,其余各位求反

 二进制数在内存中是以补码的形式存放的

 60的按位取反计算:
 计算60的 **补码** 和 **反码**

        原码      补码       反码
 十进制  60
 二进制  111100   0111100    0111100

 取反-->`取反操作是对补码进行取反`

 取反后
 补码             1000011
 原码    1111101

运算--> 11才为1

运算--> 00才为0

异或 运算--> 相同为0,不同为1

  • 位运算符

<< 左移变大

>> 右移变小

  • 比较运算符

= =! < > >= <=

  • 逻辑运算符(布尔类型)

and or not

短路功能

类似shell中得 -- && -- || --

  • 其他运算符

= 赋值

in 成员运算符

not in

is 身份运算符

is not

is None 常用来判断是不是空,未赋值。

== 等值判断和 is 身份判断是有区别的

a=[1,2,3]
b=[1,2,3]
id(a)4563826248
id(b)4563487752
a==b
True
aisb
False

表达式

表达式是指常量、变量和赋值运算符之外的运算符的组合,表达式是可以求值的。

a if a > 0 else 0
  • 优先级
  • 一元运算符高于二元运算符
    一元指一个变量或常量 包括 not
    二元指两个变量或常量 + -
  • 数值运算高于逻辑运算
  • 算术运算高于位运算
  • 乘除高于加减

括号中的总是作为一个整体参与外部运算,拿不准运算顺序的时候,最好让优先级高的加上括号。

程序结构

对于绝大多数语言来说只有三种结构:顺序、分支和循环。

  • 顺序结构

按照书写顺序从上到下依次执行。

  • 分支结构

if 语句:以开始一个块,使用缩进标示块。

在Python中 None, False, 空字符串"", 0, 空列表[], 空字典{}, 空元组()都相当于False

if CONDITION:
	suite1
elif CONDITION:
	suite2
else:
	suite3
  • 循环结构

条件循环 while,遍历循环 for,python中不建议使用迭代循环。

迭代循环体不要修改迭代器,会造成死循环等不可控错误。

break 语句可以跳出当前循环体

continue 语句可以跳过循环体内后续语句直接开始下次循环

for i in range(10):
	print(i)
	if i<5:
		break
	else:
		print("OK")

else 执行条件循环体完整循环,没有经过break跳出。

内置容器

  • 列表

最常见的线性数据结构,一系列元素的有序组合,可变,不可hash。

定义列表

list=[]
list=list()
list=[1,2,3]

操作方法

增加
l.append(a)
扩展
l.extend([6,7,8])
插入
l.insert(index,item)
删除第一个遇到的
l.remove(item)
抛出索引位置项
l.pop(index)
清空列表
l.clear()
反转列表
l.reverse()
排列列表
l.sort()实现的不太好
排序并反转
l.sort(reverse=True)
item个数
l.count(item)
查找索引
l.index(item,[index])
深拷贝-->生成一个新的对象而不是源对象的引用(id不同)
l.copy()

下标操作和切片

list[x]
list[x] = Var
list[b:e]
list[b:e:s]-->开始:结束:步长
list[:]
list[::-1]反转并生成一个新的列表
  • 元组

tuple和list大多数地方类似,tuple是不可变结构,因此可hash。

定义元组

t=()空元组  
t=tuple(list[])

PACKING 和 UNPACKING 解包和封包

x, y = [1,2] 可以列表
x, y = (1,2) 可以元组
x, *y = (1,2,3,4)
x, *_,y = (1,2,3,4)
x, (y,z) = (1,(2,3))
x,y=y,x 交换
  • 集合

集合的含义和数学上集合的含义相同,集合不是线性结构,集合中得元素是唯一的,集合元素是可hash的。

初始化

s = set()
s = {1,2,3} 不能为空,空值默认为字典

操作方法

s.add(item)增加元素
s.remove(item)删除元素
s.discard(item)删除元素不报错
s1.union(s2)并集
s1.intersection(s2)交集
s1.difference(s2)差集
s1.symmetric_difference(s2)只属于s1+只属于s2的元素
s1.issuperset(s2)s1是否s2的超集
s2.issubset(s1)s2是否s1的子集
s1.isdisjoint(s2)s1是否与s2不相交
  • 字典

初始化

d={}
d=dict()
d={key1:'var1',key2:'var2'}

查询赋值

d[key1]
d[key1] = var3
d.keys()返回键作为列表元素
d.values()返回值作为列表元素
d.items()返回键值对作为列表元素
d.pop(key,[var])返回对应值不存在键则返回var值
d.popitem()随机返回一个键值对构成一个元组