因为工作需要,所以重新稍微正式的学习下python,之前就纯粹拿python当伪代码写,实在不尊重,之后只会记录些自己之前没有注意到的知识点,因此本系列并非教学博客,顶多是学习笔记
关于python
- 代码无法加密
- c语言发布程序可以不暴露源码,将exe发布出去,java和把jar包打出去,从机器码反推源码不可能
- 编译型语言可以加密,而python这种解释型语言不可能
- python可跨平台
python解释器
- 官方解释器 CPython, 使用c语言开发
- 当前使用最广
- PyPy
- 目标为运行速度,使用JIT技术,对Python代码动态编译
- balabala
- 可以将python代码转为java字节码
- .net等等
python的数据类型
-
整数
- python对于整数范围没有限制
- 十进制
- 十六进制
- 0xff
- 打印出来显示是十进制255
- 大数
- 可以使用_隔开: 10_00 == 1000
-
浮点数
- python对于浮点数没有大小限制,超过一定范围表示为inf(无限大)
- 1.24
- 1.24e9==1.24*10^9
-
字符串
- 可用单引号或双引号,一对即可
- 内部可使用\转义符 例’
- \本身可用\表示
- '\‘t’=='t
- r’’ 表示字符串里默认不转移
- '\‘t’==\'t
- ‘’‘xxx’''中,可以直接使用enter换行表示,不用再输入\n
-
布尔
-
空值
- None 类似于null
-
变量
- python中的变量不用考虑类型
- 原因在于python是动态语言,而诸如java之类的静态语言需要类型匹配,因此动态语言使用起来更加灵活
- 当a = 'ABC’时: python解释器首先在内存中创建一个’ABC’字符串, 然后在内存中创建一个名为a的变量,将其指向该字符串
-
常量
- 全部大写的变量名代表常量
- 只是一个约定,并不是规则,依然可以改变
-
除法
- /精确除法
- //整数除法,地板除
python的编码
- 最初的127字符 ASCII
- 为了显示中文,GB2312
- Unicode将所有语言整合
- 它是一个标准,在不断发展
- 需要固定的空间比较大,在只需要打英文时浪费空间
- 目前都是使用两个字节表示一个字符
- UTF-8
- 可变长的编码
- 用几个bit开头,表示当前是8位还是16位还是24还是32
- 会浪费一定空间,但在单一短bit语言时,节省大量空间
- 兼容ASCII
- 当前计算机内存中,统一使用Unicode
- 需要保存到硬盘或传输的时候,为了节省空间,转换为UTF-8
- ord() 字符的整数表示
- chr() 编码的字符表示
- python字符串的编码
- 内存中是Unicode,一个字符对应若干字节
- 'ABC’用Unicode是3*2个字节
- 需要传输或保存时,将其转换为bytes(以字节为单位,每个字符一个字节)
- b’ABC’ 就是一个bytes类型的对象
- 它是3个字节
- 这里的bytes对象,就是bit流,byte流实际上,没啥区别
- 对字符串编码encode(编码方式) --> bytes
- 对bytes解码decode(编码方式) --> str
- 对于少量不能解码的,可以用errors=‘ignore’
- len()可以计算str字符数,也可以计算bytes的字节数
- py文件的开头
#!/usr/bin/env python3
这个在学shell中也遇到过,就是指定解释器的位置,linux中可用# -*- coding: utf-8 -*-
按照utf-8读取源码
- 内存中是Unicode,一个字符对应若干字节
字符串格式化输出
- 用%实现
- “hello,%s” % “world” == “hello,world”
- %d 整数
- %f 浮点数
- %s 字符串
- %x 十六进制整数
- 不确定用什么时,%s永远可以起作用,
- %的转义为 %%
- format()
- ‘hello,{0},成绩提高了{1:.1f}%’.format(‘小明’,17,125) == ‘hello,小明,成绩提高了17.1%’
- 第一个为占位符序号,:后面是格式
list
- -1索引表示最后一个 可以类推-2,-3…
- 删除末尾元素,list.pop()
- 删除任意元素,list.pop(i)
- list中可以有list,可以如此使用a[2][1]
tuple
- 与list十分相似,tuple一旦初始化就不能修改
- 因为不能修改,所有就更安全
- 定义tuple t = (1,2)
- 定义空的tuple t = ()
- 定义一个只有一个元素的tuple t = (1,) 用,来消除歧义
dict
- 使用dict.get()方法时,key不存在也不会报错(None)
- key必须是不可变对象