一、python解释器
解释型:解释型语言执行时一句一句依次将代码翻译成机器语言,只要有解释器就能在任何机器上运行。
编译型:编译型语言一次性将代码翻译成机器码,执行速度快,但是不能跨平台,修改代码需要重新编译。
CPython解释器:python自带的官方解释器。
JPython解释器:将代码翻译成Java语言。
Pypy解释器:速度快,直接编译
二、变量
变量是程序运行过程中用来保存数据的符号,这个符号指向一个内存地址,内存地址里保存着数据。Python中相同的值都保存在同一个内存地址中,对不可变数据类型的赋值实际上是将变量指向另一块内存地址。
python有一个小数据池的概念,对于-5到256范围的整数,以及不带特殊字符的字符串,如果值一样则不同变量名指向的内存地址也一样,这样可以节省很多内存空间。
三、基本数据类型
1、int整型
2、string字符串
(1)转义字符: 换行, 回车, 制表符,\代表一个,‘代表'
(2)格式化输出:%s字符串,%d整数,%f浮点数
x = "123" print("%s" %x) print("%(name)s" %{"name":"小明"})
(3)字符串操作
x = "hello" x.strip() # 默认去掉空白,包括 , x.upper() x.lower() x.split() #默认以空白切割成列表 x.replace() # 替换 x.join(list) # 将字典按照x拼接成字符串 x.count("e") # 出现多少个e x.find("e") # 找到第一个e的索引 x.index(1) # 取出索引为1的值
3、bool布尔类型
4、list列表
l = [1,2,3] l.append(4) # 添加 l.extend(xx) # 迭代添加 l.insert(index, number) # 在索引位置插入 l.count(1) # 计算1有多少个 l.remove(1) # 删除第一个1 l.pop(index) # 默认删除最右边的,或者删除传入的索引位置的 del l[index] # 删除
注意:列表在for循环的时候不能直接删除数据,因为会导致索引错乱,可以将要删除的值放在一张新的列表中,等循环结束后再依次删除。
双端队列:
双端队列是一个线程安全的可以快速从两端添加或删除元素的数据类型。
from collections import deque dq = deque(range(10), maxlen=10) # 指定大小,如果满了会在另一端删除 dq.append(11) dq.appendleft(0) dq.extend([12, 13]) dq.extendleft([1, 0]) dq.pop() dq.popleft()
5、tuple元组
元祖就是不可变的列表,没有增删改操作,只能索引切片或for循环查询。
# 具名元组,可以给元组每个数据按位置对应一个key,通过key取值 from collections import namedtuple City = namedtuple('City', 'name, country') # 创建一个对象,指定具名元组每个位置对应的key beijing = City("beijing", "China") print(beijing) ---->City(name='beijing', country='China') print(beijing.name) ---->beijing print(beijing.country) ---->China
6、dict字典
dic = {"k1": "v1"} dic["k2"] = "v2" # 添加 dic["k1"] = "v" # 修改 dic.pop("k1") # 删除 dic.popitems() # 随机删除 dic.get("k1") # 查询 dic.keys() # 返回所有的键,但是返回的是一个假列表,可以被循环,但不能修改 dic.values() dic.items() 返回key,value的元祖 dic.setdefault("key", "value") # 如果有key则跳过,如果没有就添加 dic.fromkeys([1, 2, 3], value) # 将dic变成一个,键为序列里的值,值为value的字典(value不写默认都是None) dic.update({1:2, 2:3}) # 迭代添加,类似列表的extend
from collection import defaultdict dic = defaultdict(func) # func是一个函数名,当使用dic[xx]取值时,如果xx这个键不存在,则会去调用func函数,返回func函数返回的值
7、set集合
集合就是字典,但是只存key不存value,集合中的数据不能重复,可以用来给列表去重。
m = {1, 2, 3} n = {2, 3, 4} m | n # 并集 m & n # 交集 m - n # 差集 m.add(4) m.clear() m.pop() m.remove()
8、frozenset冻结集合
9、bytes字节类型
四、流程控制
1、判断语句:if elif else;while
2、循环语句:for in;while
五、运算符
与and,或or,非or
非空即真
print(1 or 2) # 1 print(1 and 2) # 2 print(0 or 1) # 1 print(0 and 1) # 0
六、编码
1、ASCII码
是最早的计算机编码,只能支持英文大小写、数字和标点等特殊字符。ASCII码由一个字节8位组成,但是第八位都是0,理论上有256个空间,实际上只用了128个空间。
2、GBK国标码
ASCII码只能支持英文,所以中国人在ASCII码的基础上做了GBK国标码,他由2个字节16位组成,有65536个空间,可以支持英文和常见的中文,但是中文有接近十万个,不能完全支持。
3、Unicode万国码
当越来越多的国家加入到计算机行列,ASCII码明显不够用,GBK也不全面,所以出现了Unicode万国码,一般使用2个字节的标准,可以对应65536个符号,当不够的时候又扩展至4个字节,有42亿空间。但是实际上全世界需要存储的符号只有大约十几万个,4个字节造成太多的浪费,于是出现了UTF-8.
4、UTF-8
他是可变长度的Unicode编码,英文占用1个字节,沿用ASCII码,欧美文字占用2个字节,中文占用3个字节
x = "hello" x = x.encode("utf-8") # 编码 x = x.decode("utf-8") # 解码 bytes(x, encoding="utf-8") # 编码/解码
七、文件操作
open()函数相当于是打开了一个管道,将文件的数据先放到这个管道里,再去进行读写。所以操作完成后需要close。
f = open("test.txt", "r",encoding="utf-8") f.read() # 默认读取所有数据,如果文件过大可能会造成崩溃 f.read(n) # 读取n个字符或字节 f.readline(n) # 默认读取一行数据,结尾会有一个 f.readlines() # 读取所有行,放入一个列表,每行是一个元素,也可能会出现崩溃 # 一般用for循环的方式获取全部数据 for line in f: xxxx f = open("text.txt","w") f.write("xxx") # 先将源文件的数据清空,再写入xxx f.writelines([1,2,3]) #不仅可以实现write的功能,还能迭代写入,写入的数据只有一行
f.seek(long, location=0)
指定指针的位置,location如果是0表示开头,1表示当前位置,2表示结尾。
long表示相对于location的位置移动多少,文本模式代表字符,字节模式代表字节。
只有在字节模式下, 才能从后往前走, 就是long为负数.
f.tell()
查看指针位置,以字节数为准。
import tempfile temp = tempfile.TemporaryFile() # 生成一个临时文件,只对本程序可见,在close时删除 temp.write('hello') temp.seek(0) temp.read() temp.close()