python 基础
一.变量,常量
(1)变量的声明
1)a=1 b=2
2)a,b=1,2
- a=b=1
(2)交换
1)a,b=b,a (python独有)
2)通用方法 设置中间变量进行中转
(3)常量
字母全部大写的变量即是常量,表示不希望被修改,但实际可以修改
(4)命名规则
字母数字下划线,首字符不能为数字;变量命名须达意,不可使用关键字;大小字母有区分,不可使用汉字
二.基础数据类型
1.数字类型
(1)进制:
bin二进制, oct八进制, dec十进制, hex十六进制;
数字首字符为0b表示是二进制,0o表示是八进制,0h表示是十六进制
进制之间的转换,例如: a =123 转换二进制 bin(a) 八进制 oct(a) 十六进制 hex(a)
(2)原码反码补码之间的转换
正数:原码=反码=补码
负数:反码=原码取反 补码=反码+1 由原码=>补码
反码=补码取反 原码=反码+1
(3)Number类型赋值方式
int 赋值 a=bin(2) b=oct(4) c=hex(54)
float赋值 a = 3.14 或者 a = 3.14e3 (相当于3.14*e^3) a 3.14e-2(相当于3.14 *(e^(-2))
complex赋值 a = 3+4j 或者 a =complex(3,4)
##转义字符 格式化输出 和 关键字
\ 可以使无意义的变得有意义,也可以使有意义的变得无意义
如\n换行 \\n就是输出\n
\n 换行
\r\n 换行
\t 一个缩进符
\r 将后面的内容提到当前行行首覆盖掉前面的内容
元字符串 r"D:\note" 原型化输出 如果不加r的话,系统会把\n识别为换行
repr 原型化输出 在输出内容两边加上单引号
格式化输出 % 引号里面是待格式化的内容, %s 字符串 %d 整型 %f 浮点数 %.2f 小数点后保留两位的浮点数
格式: "%d" %(内容) (如果将%d改为%2d表示预留两位,原字符串居右,%-2d表示预留两位,原字符串居左)
高级形式 format
传参方式有:顺序传参,索引传参,关键字传参,关键字索引传参(即可以使用容器进行传参,使用字典进行传参时,字典的键系统自动添加双引号,不用再加双引号)
占位符: :s 字符串占位符 :d 整型占位符 :f 浮点型占位符 :, 金钱占位符
格式: "{:*^10}".format(内容)
^原字符串居中 <原字符串居左 >原字符串居右
*表示填充的字符
10表示填充后原字符串与填充的字符串之和
双引号,单引号,三引号的区别和应用
双引号与单引号的意义功能完全一样,仅是为了避免系统识别出错,如str="他是'鬼'" 这样的字符串并不会报错,但如果将里面的单引号换成双引号,系统就会报错
三引号的作用是用来输入可以换行的字符串,在代码块外面时也可以用来表示注释
## 关键字
type 查看所属类型 id 查看所在内存地址 len 查看长度
数据类型之间的强转
-
int: 数据强转的对象只能是 int, float, bool, 纯数字字符串
-
float: 数据强转的对象同int, 为int, float, bool, 纯数字字符串
-
bool: 可以转换一切, 转换结果只有两种(True, False)
##其中bool结果为False的情况总共有十种,bool(0) bool(0.0) bool(0j) bool(False) bool("") bool(list()) bool(tuple()) bool(set()) bool(dict()) bool(None)
- complex: 转换的对象为 int, float, bool, complex, 纯数字字符串
命名方式有两种: a=complex(0,1) 其中1指的是虚部 或者是 a=0 + 1j
##数据类型之间的精度转化 complex> float> int > bool
2.容器类型:str, list, tuple, set, dict
字符串 和 列表 索引:
正向索引:从左往右,索引从0开始 反向索引: 从右往左, 索引从-1开始
##字符串和列表的切片(舍头去尾):
str[:] 当开始值,结束值缺省时,输出整个字符串
str[:3]当开始值缺省时,输出从开始到索引为2的元素
str[2:] 当结束值缺省时,输出从索引为2到结尾的元素
str[2:4]输出从索引为2到索引为3的变量
str[::2]第三个参数用于设置步长,2为步长
列表同字符串,仅需注意一点,列表可以修改,字符串不可修改
lst[2:4]=lst_new 把lst中索引为2到索引为3的元素替换为lst_new中的元素
lst[::2]=lst_new 把选中的数量替换为lst_new中的元素,注意lst_new中的元素必须与选中的元素的数量一样
##容器如何设置
lst = [] 空列表
tup = (,) 空元组 注意里面的元素是否是一个是区分元组的关键,当里面只有一个元素时,没有逗号就不是元组,添加上逗号才是元组
set = set() 空集合 注意不要和集合混淆
dic = {} 空字典
1)容器类型的特点
(1) str: 可获取, 不可修改, 有序, 组成元素只能是字符
(2) list: 可获取, 可修改, 有序, 组成元素类型不受限:happy:
(3) tuple: 可获取, 不可修改, 有序, 组成元素类型不受限😄
(4) set: 不可获取, 不可修改, 无序, 自动去重, 组成元素只能是可哈希的值😢(即number, str,tuple)
(5) dict: 键值对存储的数据 可获取, 可修改, 表面上有序, 实际上无序, 键只能是可哈希的值😢(即number, str, tuple), 值不受限😄
2)容器类型的强转
(1) str类型强转:
强转范围: 所有
强转方式: 直接在强转对象两边加上双引号即可
(2) list类型强转
强转范围: 所有
强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放进列表
2) 字典 :强转时只保留字典的键
3) 其他容器类型: 直接把容器两边的括号换成中括号即可
(3) tuple类型强转
强转范围: 所有
强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放入元组
2) 字典 : 强转时只保留字典的键
3) 其他容器类型: 直接把容器两边的括号换成小括号即可
(4) set类型强转
强转范围: 可哈希的对象
强转方式: 1) 字符串: 将字符串的每个元素单独抽离出来,逐一放入集合, 有相同的字符时会自动去重
(5) dict类型强转
强转范围: 二级容器, 且里面的元素只有两个
强转方式: 1) 外面是列表, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值
2) 外面是元组, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值
3) 外面是集合, 里面是列表或者元组时, 容器里面的第一个元素强转成键,第二个元素强转成值
接下来的两种情况并不推荐使用,因为限制性很大
4) 外面是列表, 元组, 集合, 里面是集合时, 因为集合无序,所以提取到的键值极容易与原意不符
5) 外面是列表,元组,集合,里面是字符串时,字符串的元素只能为两项,限制性很强
## 多级容器的获取
例如: res = [["1","2"],("a","b"),["aa","bb","cc",{"1":"aaa","2":"bbb","3":"ccc","4":"bingo"}]]
如何获取"bingo": res[-1][-1]["4"] 注意: 前面两个-1是反向索引的索引值,"4"是字典中的键值
##容器的拷贝
导入copy函数
copy.copy() 浅拷贝
copy.deepcopy() 深拷贝
浅拷贝只适用于有一层容器时,会把拷贝的内容存储到另一个空间中
深拷贝会把容器里面的所有内容都进行拷贝储存 所以耗用资源大,且调用更慢
当目标只有一层时,用浅拷贝,多层时,用深拷贝
3) 容器的增删改查:
(1) str
1)算数运算符
+(字符串的拼接), * (重复几次) \字符串的跨行拼接
2)关键字
capitalize 字符串首字母大写
title 单词首字母大写
upper 全部大写
lower 全部小写
swapcase 大小写反转
find 查找元素所在的索引, 找不到返回-1
index 查找元素所在的索引, 找不到报错
count 查看某个元素在字符串中出现的次数
startswith 判断是否以某字符串开头😄
endswith 判断是否以某字符串结尾😄
len 计算元素的长度
replace 更换字符串的元素
split 根据符号进行分隔
join 以某种符号进行连接
strip 去掉字符串两边的符号, 默认是空格
lstrip 去掉字符串左边的符号
rstrip 去掉字符串右边的符号
isspace 判断是不是由空格组成
isdecimal判断是不是纯数字(有小数点也不行)😄
isupper 判断是不是都大写
islower 判断是不是都小写
center 原字符串居中,填充字符串😠
3)进行切片处理
(2) list
- 可以使用算数运算符
+(列表拼接), *(列表重复几次) del lst[0] 删除索引为0的元素
-
可以通过切片进行操作
-
增:append 在列表末尾追加元素,
insert 插入元素(如:lst.insert(0,"11") 在lst列表中索引为0的地方插入元素"11" )
extend 迭代追加所有元素 lst.extend(lst_new)
删: pop 指定索引删除 lst.pop(0)
remove 指定元素删除 如 lst.remove("11") 如果有多个相同值,默认删除第一个
clear 清空列表
改: sort 排序,默认从小到大进行排序,reverse=False,从大到小排序lst.sort(reverse=True)
reverse 列表反转操作
查: index 获取元素对应的索引值,找不到会报错
count 查看某个元素出现的个数
(3) tuple 不可修改
(4) set
intersection()交集&
difference()差集 -
union() 并集 |
symmetric_difference() 对称差集 ^
issubset()判断是否是子集<
issuperset() 判断是否是父集>
isdisjoint() 检测两集合是否不相交,不相交返回True, 相交返回False
add 添加一个数据 update 添加多个数据
pop随机删除列表中的一个数据
remove 删除集合中指定的值
discard 删除默认值,不存在也不报错
clear 清空集合
frozenset 冰冻集合
(5) dict
增: fromkeys 使用一组键和默认值创建字典,不推荐使用,当键所指代的是一个列表时,会出现问题,其他键会重复对键的操作
删: pop() 通过键删除键值对 popitem删除最后一个键值对 clear 清空字典
改: update 批量更新,(有该键就更新,没有就创建)
查: get 通过键获取值,可以设置第二个提示参数,找不到第一项时就会提示第二项, 预防报错
dict.keys()键组成的可迭代对象 dict.values()值组成的可迭代对象 dict.items()键值对凑成一个个元组,组成的可迭代对象
3.判断数据类型
instance(lst,list) 判断lst是不是属于list, 属于返回True, 不属于返回False, 第二个参数可以是多项,只要有隶属的容器就显示正确
三. 运算符
1.算数运算符
+ - * /(除, 结果为小数点后有六位的小数) //(地板除, 结果是用退一法取到的整数) %(取余) ** (幂次方)
负数与非负数之间的运算: 7%-3=4 -7%3=-4 -7%-3=-4
2.位运算符
&且|或 ^异或 ~非 <<左移几位 >>右移几位
##位运算符都是对补码进行操作的,其中~非进行取反操作,所有都需要取反(包括第一个符号位)
优先级: (<< , >>) > & > ^ > ~
3.比较运算符
> < >= <= == != 返回的结果只有两种, True 或者 False
4.身份运算符
is / is not 判断是不是位于同一个地址
#下面只对python3.6版本负责
-
int -5-无穷 内存地址固定
-
float 非负数相同
-
complex 纯虚数时相同
-
bool 值相同时相同
-
字符串相同或者是空元组时,相同
5.成分运算符
in / not in 判断前者是否在后者里面, 后者只能为容器类型;且对于字典,只能判断键,不能判断值
6.逻辑运算符
not and or 优先级 : ()> not> and> or
逻辑短路现象: 即只判断了第一个就不再往后判断第二个的情况, 如: False and True, True or False
牢记从上到下,从左到右顺序进行的读码原则和逻辑短路的现象, 所以在判断逻辑运算符的时候可以基于上面两条进行判断,出现逻辑短路,输入逻辑短路那对应的类型(数字或者bool), 没出现逻辑短路,则看第二位对应的是什么类型输出对应的类型(数字或者bool), 如:
True and 1 => 1 1 and True =>True True and 0 => 0 0 and True => 0
False and 0 => 0 0 and False => False
1 or True => 1 True or 1 => True False or 0 => 0 0 or False => False
0 or True => True True or 0 => True
7.赋值运算符
= += -= *= **= /= //=
8.运算符的优先级
算>位>比>身>成>逻>赋 (谐音:蒜味比深城裸夫)
二元运算符的优先级要大于一元运算符的 (一元,二元的区分标准在于需要的参数是需要一个, 还是两个)
** 优先级最高, =优先度最低
三.代码运行结构
顺序结构, 分支结构, 循环结构
分支结构可以分为:单项分支,双项分支,多项分支和巢状分支
代码块: 执行特定功能的某一段函数
循环:while可执行死循环, for可遍历无序容器
##for 可遍历等长的多级容器
lst = [("王健林","王思聪","林宁"),["马云","马化腾","马丽"],["王宝强","马蓉","宋小宝"]]
for i,j,k in lst:
print(i,j,k)
循环体里面的关键字: break 跳出当前运行的循环体 continue 跳过本次循环 pass 占位符
range函数 range(开始值, 结束值, 步长) 留头去尾
四.文件操作
文件可以存储两种数据格式: 字符串 和 字节流
fp 文件io对象
字节流就是用来传输和储存的一种数据格式, 实际上就是二进制
多个字节组成的就是字节流
多个字符组成的就是字符串
表示: 在字符串外头前面加上一个b,转换成字节流 (必须属于ascii码才能进行转换)
将字符串和字节流进行转换: encode 编码(将字符串转换为字节流) decode 解码(将字节流转换为字符串)
格式
fp = open("文件名",mode="选择模式",encoding="编码方式"):
fp.close() # 这种打开方式,必须要配上这个关闭文件操作, 否则操作内容不会往磁盘中操作
with open("文件名",mode="选择模式",encoding="编码方式") as fp:#以这种方式打开文件只需缩进,不需专门关闭
with 可以用来同时开启两个文件,例如
with open("文件名",mode="模式",encoding="编码方式") as fp, open("文件名",mode="模式",encoding="编码方式")
编写模式
r r+ rb rb+
w w+ wb wb+
a a+ ab ab+
r 只读模式, 只可读取, 不可写入, 读取方式是从光标开始从左往右读取,即 当光标到结尾时,读取不到内容,需要通过seek回到开头进行读取
w 编写模式, 清空重写, 不可读取, 写入方式是从开头开始从左往右进行覆盖重写
a 追加模式, 不可读取, 写入时不论光标在哪, 直接移动到末尾进行编写
+ 功能加强符号, 即缺什么功能添加什么功能, 例如: w缺少读取功能, w+ 就会添加上读取功能
b 字节流模式,输入输出的都是以字节方式进行的, 模式中有b时,不需要添加encoding编码转换字节流, 否则会报错
fp.seek(0,0) 第一个0是指从右往左数,没有字节,第二个0是指定的读取方向,从右往左读取
fp.seek(0,2)第一个0是指从左往右读没有字节,第二个0是指定的读取方向,从左往右读取
fp.flush 刷新缓冲区
### 刷新缓冲区的时刻: 文件关闭时,缓冲区内容写满时,整个程序运行结束时,手动刷新时(flush)
fp.readable() 判断文件是否可读
fp.writable() 判断文件是否可写
fp.readline() 读取光标后面一行
fp.readlines() 读取光标后面的所有内容,将内容安装换行读取到列表当中
fp.writeline() 将内容是字符串的可迭代数据写入到文件中
truncate() 把要读取的内容读取出来,其他的清空重写(字节)
fp.writelines()
## truncate 单位 字节 seek 单位 字节
read 单位 字符个数(如果是字符串就是字符个数,如果是字节流就是字节个数)
readline 单位 字符个数(如果是字符串就是字符个数,如果是字节流就是字节个数)
编码方式
unicode 万国码,不论中文还是英文统统都占据4个字节,因为占用资源太大, 所以现在相当于被淘汰了
utf-8 万国码的优化版, 中文占据3个字节, 英文,数字占据1个字节
gbk 中国设定的一种编码格式, 中文占据2个字节
五.函数
格式: def func() def 定义函数 func函数名
函数名可以当成另一种变量,只赋值不执行,当函数名后面加上括号时,就是在进行函数的调用了
函数命名同变量命名: 字母数字下划线,数字不能当名头,命名须达意,不可为关键字,大小字母有区分,不要使用汉字
闭包函数 外部函数返回了内部函数, 且内部函数使用了外部函数的局部变量
高阶函数 返回了函数, 或者以函数作为参数
常用内置函数
###注意: 使用内置函数时,需提前输入函数所在的包,如import time
time函数
time.ctime 当前时间 年月日 星期几 时分秒
time.time 时间戳 (相对与1970年1月1日而言过的秒数)
datetime 函数
datetime.datetime.now() 可获取当前的年月日 时分秒
datetime.datetime.today() 可获取当前的年月日 时分秒
datetime.strftime 可设置输出的日期字符串的格式
random 函数
random.range() 从范围内随机选出一个数
random.randint() 从范围内随机选出一个整数
sys 包
sys.exit(0) 强制退出系统
sys.arvg 用于收集文件名后面的参数,并把参数存放到列表中
json模块
转换成json字符串 json_str = json.dumps(str)
json字符串解压 str = json.loads(json_str)
浙公网安备 33010602011771号