1. 开发环境、解释器、开发工具
- 开发环境
运行底层代码支持、解释器、底层源代码’ - 解释器
官方标配:Cpython
编译运行解释器:Pypy
Java混合开发:Jython
.NET混合开发:Ironpython
代码高亮:Ipython
等…… - 开发工具:编写代码的IDE工具、结合解释器解释运行python程序(Pycharm)
2. 程序结构
- 顺序结构:
代码逐行解释运行 - 选择结构:
if-else选择结构:单分支、双分支、多分支、嵌套方式
三元操作选择结构:结果1 if 条件 else 结果2 - 循环结构
while循环:普通循环条件控制
for循环:用于序列数据循环控制
break 跳出循环
continue 结束本次循环,进行下一次循环
else 里的代码循环正常结束之后才会执行,break终止程序不会执行
3. 组合数据类型
- 列表(list):可变类型、有顺序的储存多个数据
增加数据:append()末尾追加一个数据 、extends()默认追加一组数据 insert()指定位置增加一个数据
删除数据:根据下标/编号删除数据 del x[2] 、pop()删除列表末尾的数据、remove()删除指定的数据、clear()清空列表、del x删除列表
修改数据:根据下标/编号,直接修改数据、x[12] = 20
查询数据:成员运算符:o in x 、count:()查询某个数据在列表中出现的次数、index()查询某个数据在列表中出现的位置
其他函数:sort() 列表排序、reverse()列表翻转、max(x)查询最大值、min(x)查询最小值、len(x)查询列表中元素的个数 - 集合(set):可变类型,储存多个没有顺序、不可重复的数据
增加数据:add()
删除数据:pop()随机删除一个数据、remove()删除指定的数据、clear()清空集合
修改数据:判断是否存在-> 删除->增加数据
查询数据:成员运算符判断、遍历数据
集合运算:并集union()、update()、差集difference()、difference_update()、交集intersection()、intersection_update() - 元组(tuple):不可变类型,可以储存多个有顺序可重复的数据
增加数据:无
删除数据:无
修改数据:无
查询数据:count()、index()
其他函数:max()、max()、len() - 字典(dict):可变类型,利用键值对储存多个数据的组合数据类型
循环遍历:通过遍历keys()遍历整个字典、通过遍历items()遍历整个字典、不能通过遍历values()遍历字典所有数据
查询数据:通过key查询value(方括号语法、get()函数)
增加数据:方括号语法(如果key值不存在,增加、如果key值存在,修改)、setdefault()函数(如果key值不存在,增加、如果key值存在,不修改)
其他函数:keys()获取key所有的键、values()获取value所有的值、items()获取item所有的项
4. 辅助函数
- dir()
查询指定的某个数据~可以操作的所有函数、变量
dir(list)
[‘add’, ‘class’, ‘contains’, ‘delattr’, ‘delitem’, ‘dir’, ‘doc’, ‘eq’, ‘format’, ‘ge’, ‘getattribute’, ‘getitem’, ‘gt’, ‘hash’, ‘iadd’, ‘imul’, ‘init’, ‘init_subclass’, ‘iter’, ‘le’, ‘len’, ‘lt’, ‘mul’, ‘ne’, ‘new’, ‘reduce’, ‘reduce_ex’, ‘repr’, ‘reversed’, ‘rmul’, ‘setattr’, ‘setitem’, ‘sizeof’, ‘str’, ‘subclasshook’, ‘append’, ‘clear’, ‘copy’, ‘count’, ‘extend’, ‘index’, ‘insert’, ‘pop’, ‘remove’, ‘reverse’, ‘sort’]
- help()查询指定的变量、函数、类型的操作帮助手册
help(list.insert)
Help on method_descriptor:
insert(self, index, object, /)
Insert object before index
5. 函数操作
- 函数的声明和调用
函数
生活中:行为,包含了一系列操作过程的行为–>通过调用行为~执行一个过程
代码中:封装了大量代码的代码块,代码块进行了命名–>通过名称~调用执行一个函数
声明
def关键字:defined定义
def 函数名称(函数中代码执行需要的参数列表):
函数中执行的代码块
[return 返回值]
文档中:如果在操作语法说明中出现了方括号~表示这一部分内容是可选的
调用
通过该函数名称调用执行函数中的代码
def test():
# 函数中的代码
pass
test() # 调用执行test函数,执行test函数中的代码
test2 = test # 将函数test赋值给变量test2,并不会执行函数test
test2() # 执行test2函数~ test2中存放的是test-> 执行test()函数
- 函数的参数:函数中的代码执行需要的数据
参数的区分
形式参数:函数声明时定义在函数后面括号中的参数、函数执行、这些数据不是具体的
实际参数:调用执行函数时,在函数括号中传递的真实数据、具体的、存在的数据
函数参数的定义
位置参数
def test(a, b, c, d):
print(.....)
# 操作过程中,调用执行时~实际参数按照形式参数的前后顺序[位置]依次赋值
test(1,2,3,4)
默认值参数
def test(a, b, c, d=100):
print(.....)
# 操作过程中,函数声明中~某个形式参数可以直接赋值~该形式参数就是默认值参数;默认值参数可以在调用时不传递数据~使用默认数据进行运算。
test(1,2,3) # d自动赋值默认100运算
test(1,2,3,4) # d赋值4进行运算
# 注意:默认值参数一般放在最后面
可变参数
def test(a, *args): args: arguments 参数
print(.....)
# 操作过程中,可以通过符号*,声明某个可以接受多个数据的可变参数~ 可变参数可以接受0~n个数据。
test(1,2,3)
# a赋值1,args赋值(2,3)
test(1,2,3,4)
# a赋值1, args赋值(2,3,4)
# 可变参数可以将接受到的多个参数~自动封装成元组进行操作。自动封装过程~某些资料:自动封箱/自动装箱
# 注意:可变参数一般放在最后面
关键字参数
def test(a, **kwargs): kwargs : keyword arguments 关键字参数
print(.....)
# 操作过程中,可以通过符号**,声明某个可以接受多个key-value键值对数据,并且自动装箱成字典接受到函数中进行处理
test(1, name="jerry", age=12)
# a赋值1,kwargs赋值{"name": "jerry", "age": 12}
# 注意:关键字参数一般放在最后面
万能参数
def test(*args, **kwargs):
pass
# *args可以接受任意多个的单个数据
# **kwargs可以接受任意多个的key-value键值对数据
# 按照函数调用规范,单个数据放在前面,key-value数据放在后面。所以上面的参数列表:万能参数,可以接受任意数据当成函数的参数进行处理。
强制关键字参数
def test(*, name, age):
pass
# 声明在符号*后面的所有参数,都是强制关键字参数~
# 特点:一旦声明~函数中定义了的参数名称,必须在调用的时候使用它们作为key值
test(name="tom", age=100) right
test(x="jerry", y=10) error
# 理由:极大限度的提升代码的可读性
pass关键字
占位符、待开发的缩进代码
def test():
# TODO 注释【功能描述、时间、作者】
pass
# 通过pass占位符,让声明但是还没有实现的函数~不报错。
# 不影响整体项目的进度。
# TODO注释~一种特殊的注释,表示待开发功能
# 常规的IDE工具基本都集成了TODO注释的操作。
6. 字符串str
- 字符串查询
index() 查询不到:ValueError: substring not found
rindex()、find()、rfind() 查询不到:-1 - 字符串拆分
split(“拆分的字符”)、rsplit()、partition(“拆分字符串”)、rpartition() - 字符串大小写切换
capitalize()、swapcase()、upper()、lower() - 字符串对齐
ljust(width)、rjust(width)、center(width) - 字符串替换
replace(old, new) - 字符串内容判断
isdigit()数字、isnumeric()数字、isalpha()字母、isalnum()字母+数字、istitle()首字母大写、islower()小写、isupper()大写 - 字符串空格处理
strip()剔除字符串两边的空格、lstrip()、rstrip() - 字符串站位
%、format()、字符串中使用变量 - 字符串切片(语法注意:反向切片)
方括号
s[start, stop, step=1]
# s是个字符串
# start开始位置
# stop结束位置
# step步长
>>> s = "he l lo python1901"
0123456.......
>>> s = " h e l lo python1901"
0 1 2
s[1:] -> e l lo python1901
7. 文件IO
- 文件数据的输入输出
输入:input
输出:output - 涉及到的模块
操作系统交互:os
解释器交互:sys
操作系统路径相关:os.path - 文件的操作模式
open()函数操作文件
mode操作模式
(r:只读、w:只写、a:追加、t:文本、b:二进制、+:读写)
文本文件操作
open(file, ‘r’)打开一个文件读取文件中的数据 、
open(file, ‘w’)打开一个文件,向文件中写入数据、
open(file, ‘r’) == open(file, ‘rt’)
二进制文件操作
open(file, ‘wb’)打开一个二进制文件写入数据
open(file, ‘rb’) 打开一个二进制文件读取数据
通用操作函数
读取数据:read()
写入数据:write()
文件操作流程
with语法:with open(…) as f: # 操作完成之后,会自动关闭文件
注意:程序中打开文件进行操作之后,一定要关闭文件释放资源 - python对象的操作
对象字符串处理操作
python对象:字典存储
# 字典:d = dict()
# 字典-> 字符串
with open(file, "w") as f:
f.write(字符串) 存储到文件中
# 最终:文件中存储的是字符串数据
python对象:读取数据 eval函数
with open(file, 'r') as f:
data = f.read() # 读取数据,将文件中的字符串数据,读取到程序中->问题:字符串依旧是字符串,不是python对象
# eval函数:将一个字符串转换成python表达式
JSON模块对象直接操作
dump(python对象,文件)
# # 准备操作的数据
users = {'admin': {'username': 'admin', 'password': '123', 'nickname': '老刘'}}
# 1. 将程序中的数据,直接存储到文件中
# json模块的操作
with open('./data/3.1.json', 'w') as file:
json.dump(users, file)
打开一个文件~ 通过json.dump函数,将该对象,添加到文件中
load(文件)
# 将文件中的数据,读取到程序中
with open('./data/3.1.json', 'r') as file:
users = json.load(file)
print(users, type(users))
- python对象的序列化操作
序列化:按照有序的方式整理数据
反序列化:按照定义的有序方式~反向整理数据
pickle序列化模块
dump(python对象, 文件)
load(文件)
marshal序列化模块
dump(python对象,文件)
load(文件)
shelve序列化模块
sl = open(file) 打开文件进行操作
sl[‘key’] = python对象