python开发基础进阶
1.程序的组成
从两个方面分类:
程序 = 数据 +(汇编)指令
程序 = 数据结构 + 算法
算法:编写程序的逻辑,解决问题的流程
[tess.cpp]
a=hello #数据:a hello 这里为非数值型数据
#数据结构:字符串
if(a is hello): # 一个算法由n个指令组成(计算机底层硬件的操作:if is print )
print ‘ok’
[test.o]
01010101 01010101 01010101
01010101 01010101 01010101
01010101 01010101 01010101
2.语言
发展史
机器语言(01010101),打字机打动,纸条一个洞打不打代表是否是1(最原始的字典),hello world(96个位置,1就打洞)
汇编(move 1,寄存器(硬件),add 寄存器1 寄存器2) a = 1 ,b=1+2
C(第一门高级语言(符合人类逻辑,且不需要懂很多硬件知识))
c++ java python(1.更符合人类逻辑和事物特征:面向对象出现2.需要动更少的硬件知识。)
区别:
静态/编译型:
先编译(直接翻译完成一个机器码文件,但是没有真正的执行),再执行(交给CPU去执行):活干完了一半
bianyi tess.cpp -> 多了个test.o
zhixing test.cpp
先转为机器码(c++)或者中间代码(Java jvm-java字节码)
动态/解释性:
边运行,边翻译,边执行(两部为一步:缺点是效率低)
.py .pyc(如果先编译成.pyc .pyo)执行也可以更快,*但是它的底层是解释因此很慢
要研究数据结构+算法,最好选择静态/编编译型语言,因为动态/解释性语言坑很多(本身问题很多)
3.变量与内存
变量作用:标记并存储数据, 增强可读性。能被后面的代码调用,数据复用。
python :按引用传递(和别的语言的概念不同):底层是C(指针即地址(内存条的位置))
a=1
b=2
b=a
c=1
d=1
一夫(数据)多妻(变量),一个变量只能对一条数据,但是一条数据却可以被很多变量所对应。
id()查看地址
is,is not 比较数据的值、地址
== 比较数据的值
字面量(不同语言的字面量的类型不同):在Python中,对字面常量(数字、字符串、布尔、字节)对象进行缓存,
多个变量赋相同值,其实是同一个值
4.True 和 False
bool() 判断真假
False: 0和False
其余为真
if True (如果真,则执行)
if(bool(False) is False):
print 6
while True(如果真,则循环)
5.流程控制
if 带条件的->过滤
while 带条件的->循环
for 有限次数的->循环
6.数据结构
数据结构:数据的存储形式(计算机存储,组织数据的方式)
基本数据类型:
数字、字符串:连续存储
列表
是否可变:数字、字符串的数据不可变(内存空间是否可伸缩list dict)
如果重新赋值,会申请另一块内存(如果不是字面量)
查看python源码:
其它数据类型:
文件
数据库
[]研究数据结构?不同的数据,需要不同的数据结构去存储,造成的增删改查的性能不一样
*遍历
7.每种类型的方法:
增删改查(及展开)

4.基本数据类型 (1)(bool类型 数字int 字符串str(常用) 列表[](常用) 元祖() 字典(常用) 集合(没用)) (2)嵌套赋值:列表、元祖、字典 (3)支持遍历、索引、切片:字符串、列表、元祖:for、var[3]、var[2:]、in和not in (4)字典:key,value。key类型:int,str。for k,v in d.items(Dict) (5)遍历:for k,v in enumerate(List|tuple): (6)划分: 1.是否是序列(索引是整数),支持索引、切片(字符串、列表、元祖 2.是否可变:按所占内存大小、内存地址是否可变区分。(不可变:数字、字符串) (7)操作序列: len() 求序列的长度 + 连接两个序列 (常用与字符串拼接) in 判断是否存在序列 (8)字符串格式化:% %s %d, format(推荐,就可以换序) pythonic (9)类型转换 数字、字符串、列表、元祖 查看数据类型:type(var) str(int) # 数字转字符串 int(str) # 字符串转数字 list(str)# 字符串转列表 ”.join(list) # 列表转字符串 tuple(list) # 列表转元组 list(tuple) # 元组转列表 5.基本数据类型常用方法 格式type.methond() (1)字符串 format # 格式化 replace # 替换 join # 拼接 strip # 去除字符串两边空格 str.split(‘char’) # 分割字符串 startswith # 以…开头 endswith find # 查找 encode # 编码 (2)列表|元组 count # 数量 copy # 复制 等效于== append # 追加 extend # + 拼接 insert # 插入 pop remove # 删除 list[index] = value # 改 reverse sort clear (3)字典 items get(‘key’) # 等效于dict[‘key’] keys values setdefault # == 赋值 update(d1) # 增加 pop popitem # 删除 clear copy 队列 :是一种数据结构(存储方式) List|tuple : 元素连续分布 编码 6.文件操作 数据库:分类,比excel强大的地方就是:分表 r w a w:覆盖写 a:追加写 r+:默认光标在开始位置,写的话时追加写 w+:覆盖写,想读取内容,seek调整 a+:光标默认在文件最后位置,不管光标位置,一定是追加写,seek调整位置读取 seek的应用:比如断点续传, ------------rb wb ab f=open("test","r",encoding="utf8")#解码 f=open("test","rb")#直接拿字节数据,所以不用解码 print(f.read()) f=open("test6","wb") f.write("hello 倩雯".encode("utf8"))#wb需要字节数据转换utf8,w直接家的字符串 f.close() f=open("test6","ab") with 推荐 f=open("rest6") f.read() f.close() with open("test6") as f: #f=open("test6") f.read()

文件操作流程: 1:打开这个文件 open() 2:操作文件 read,write 3:关闭文件 close() 打开文件 #打开,以utf8编码打开#仅可读: f=open("test",mode="r",encoding="utf8") #可写,不可读,覆盖,加绝对路径 f=open(file = 'E:网盘下载视屏笔记python笔记文件基本操作',mode="w",encoding="utf8") #追加模式 f=open("test3",mode="a",encoding="utf8") #二进制读取模式,硬盘怎么存就怎么读。读取出来后是二进制模式 f=open("test",mode="rb") 读操作 f=open("test2") data=f .read()#读取 data = f.read(5)#读指定个数的字符 data2 = f.read(5)#从光标位置 读指定个数的字符 data = f.readline() data2 = f.readline() data= f.readlines()#拿到的是一个列表结果,带着换行 print(data) print("data2",data2) f.close()#关闭 for line in f : print (line) 假如需要处理的文件不知道是什么编码 使用python第三方软件 安装:pip3 install chardet import chardet f = open('log',mode = 'rb') data = f.read() f.close() result = chardet.detect(open('log',mode='rb').read()) print(result) 命令行: import chardet f = open('log',mode = 'rb') data = f.read() chardet.detect(data) data.decode("gb2312") 写操作 f.write("hello world")#清空覆盖,如果是不存在的文件,直接创建 f.write(" 哎呦我去") -----------------------写,flush操作 追加模式: a f=open("test5",mode="a",encoding="utf8") f.write("/nhellp test5") 读写模式: r+ 先读后写,光标处于最后一位,可以追加 f=open("test5",mode="r+",encoding="utf8") 写读模式: w+ 先写再读,从第一行开始写,覆盖写 f.flush() #刷新存入 import time #做延迟 time.sleep(100) f=open("test",mode="w+",encoding="uest",mode="r+",encoding="utf8") print(f.read(3)) f.write("hello原浩雄") print(f.read()) f.seek(3,0) #移动光标到开始位置 按照字节走,不同于read()方法 f.seek(1,0) print(f.read()) print(f.tell()) f.close() a+ 总是再光标位置最后位置添加 f=open("test2","a+",encoding="utf8") f.seek(0) print(f.read())#读取后光标处于最后 f.seek(0) f.write("xiong") f.write("yuan") 练习(不常用) count =0 for line in f.readlines(): if count == 0: line = "".join([line.strip(),"原浩雄"]) print(line.strip()) count+=1 推荐,保持在运行时内存只存储了一行信息 count =0 for line in f: #f 可迭代对象,序列#优化内存 if count == 0: line = "".join([line.strip(),"原浩雄"]) print(line.strip()) count+=1 进度条 import sys for i in range(100): sys.stdout.write("#") sys.stdout.flush() #强行刷新显示 import time time.sleep(0.5)

#可读可写模式 r+ w+ a+ # # R+ # # f=open("test2",mode="r+",encoding="utf8") # # # # print(f.read()) # # f.write("where is you ") # # #W+ 先覆盖,再读取 # # # f=open("test",mode="w+",encoding="utf8") # f=open("test",mode="r+",encoding="utf8") # print(f.read(3)) # # f.write("hello原浩雄") # print(f.read()) # #f.seek(3,0) #移动光标到开始位置 按照字节走,不同于read()方法 # # # f.seek(1,0) # # # print(f.read()) # # print(f.tell()) # # f.close() #a+ 总是再光标位置最后位置添加 # f=open("test2","a+",encoding="utf8") # f.seek(0) # print(f.read())#读取后光标处于最后 # f.seek(0) # f.write("xiong") # f.write("yuan") #------------------总结 # r w a w:覆盖写 a:追加写 #r+:默认光标在开始位置,写的话时追加写 #w+:覆盖写,想读取内容,seek调整 #a+:光标默认在文件最后位置,不管光标位置,一定是追加写,seek调整位置读取 #seek的应用:比如断点续传, #------------rb wb ab #f=open("test","r",encoding="utf8")#解码 # f=open("test","rb")#直接拿字节数据,所以不用解码 # print(f.read()) # # f=open("test6","wb") # f.write("hello 倩雯".encode("utf8"))#wb需要字节数据转换utf8,w直接家的字符串 # f.close() # # f=open("test6","ab") #with #推荐 # f=open("rest6") # f.read() # f.close() # # with open("test6") as f: #f=open("test6") # f.read()
8.查看python源码
1.查看部分源码(不能查看实现,常用关键字的说明文档)
pycharm:输入关键字/import 关键字,按住ctrl键+鼠标点击关键字
__ 私有方法,不公开(约定不能用,但是可以用)
公有方法
2.查看全部源码
去官网下载源码(C语言的源码)
要安装?就要编译
3.自学/进阶直接看(最清楚的)
4.通过语言的源码、高端开源项目源码去进阶