数据类型总结:
1.可变不可变:
可变类型:list,dict
不可变类型:int,float,str,tuple
存储的格式:
存一个值:int,float,str
存放多个值:list,dict,tunple
访问方式:
只能通过变量名直接访问:int,float
可以通过索引(有序/序列):str,list,tunple
可以通过key访问:dict
2.字符编码
内存中统一使用unicode,特点是:
1、 兼容万国字符
2、 与其他国家的编码都有对应关系
保证不乱码的关键:
1、 采用的字符编码能够兼容你要存放的字符
2、 字符用什么编码标准存放的,就应该用什么编码去解码
Python2:ASCII
Python3:utf-8
在文件头:
#conding:gbk
Python3:
str类型是unicode编码的
Python2:
Str类型是uniconde.encode(‘文件指定的编码’)之后的结果
X=u’你’:存成unicode
1、 文件处理(*****)
2、 函数(*****)
1. 什么是函数
2. 为何用函数
3. 函数的分类,如何用函数
4. 定义函数
5. 调用函数
6. 形参与实参的详细使用
7. 函数对象
8. 函数嵌套
9. 名称空间与作用域
01集合:
集合(****)
集合的类型:
作用:
需要优先掌握:
1、 集合的定义已经3个注意点
2、 集合的关系运算
3、 Len,in,not in
4、 For循环遍历集合
需要掌握的:
1、 集合的去重以及局限性
2、 往集合内添加或删除元素,add,update,pop,remove,discard
注意:
1. 每一个元素都是不可变类型
2. 集合内元素不能重复
3. 集合的元素是无序的
集合的关系运算
#有如下两个集合,pytoners是报名python课程的学员名字集合,linuxers是报名linux课程的学员名字集合
pytoners={'frank','emma','cherry','sunny','franksunny'}
linuxers={'frank','emma','cherry','eva','joy','nacy'}
# 1.求出即报名python又报名linux课程的学员名字集合
print(pytoners & linuxers)
print(pytoners.intersection(linuxers))
# 2.求出所有报名的学生名字集合
print(pytoners | linuxers)
print(pytoners.union(linuxers))
# 3.求出只报名python课程的学员名字
print(pytoners - linuxers)
print(pytoners.difference(linuxers))
# 4.求出没有同时这两门课程的学员名字集合
print(pytoners ^ linuxers)
print(pytoners.symmetric_difference(linuxers))
#5.==
s1={1,2,3}
s2={3,2,1}
print(s1 == s2)
#6.父集 > >=
s1={1,2,3}
s2={1,2}
print(s1 >= s2)
print(s1.issuperset(s2))
#7.长度len()
print(len(s1))
print(len(pytoners))
s1={1,2,3,4}
s2={3,4}
s1.difference_update(s2)
print(s1)
列表去重方法:
info=[
{'name':'frank','age':'18'},
{'name':'sunny','age':'19'},
{'name':'shine','age':'18'},
{'name':'frank','age':'18'},
{'name':'frank','age':'18'}
]
l=[]
for dict in info:
if dict not in l:
l.append(dict)
info=l
print(info)
For循环遍历集合
s={'frank','sunny','franksunny',1,1,2}
for item in s:
print(item)
文件处理
1. 什么是文件
文件是操作系统为用户或者应用程序提供一个操作硬盘的虚拟单位
2. 为什么要用文件
应用程序需要把内存的数据永久保存下来,应用程序无法直接操作硬盘,需要通过操作系统虚拟单位操作硬盘
3. 如何要用文件
open操作做了哪些事情
1、 向操作系统发送打开文件的请求
2、 在应用程序中拿到一个返回值,并指向操作系统打开文件
F=>应用程序中的一个值=>打开操作系统的文件a.txt=>硬盘的一个空间
f.close #向操作系统发送关闭文件请求
总结:文件处理的步骤
1、 打开文件
2、 读/写文件
3、 关闭文件
With可用使用上下文,可以同时打开两个文件,并且程序结束自动发送关闭操作系统打开文件请求
with open('a.txt',mode='wt',encoding='utf-8') as f,\
open('b.txt',mode='wt',encoding='utf-8')as f1:
#文件处理代码块
Pass #占位
4. 文件打开的模式三种
r:只读模式
w:只写
a:只追加
5. 控制文件内容的模式有两种(不能单独使用,必须与r、w、a连用)
t:text文本模式,该模式下操作文件内容的单位都是字符串,该模式只能是文本文件
强调:该模式下必须指定enconding=’字符编码’
b:bytes二进制模式,该模式下操作文件内容的单位是bytes,该模式适用所有类型文件
1、 r模式
文件不存在,则报错
文件存在,并且文件的指针调到文件的开头
2、 w模式:只写模式
文件不存在则创建一个空文档,并且文件指针跳转到文件的开头
文件存在,会将内容清空,并且文件指针跳转文件开头
如果在文件打开不关闭的情况,连续写入,本次写入会基于上一次指针的末端继续写入
with open('a.txt',mode='w',encoding='utf-8')as f:
l=['11\n','22\n','33\n']
# for item in l:
# f.write(item)
f.writelines(l)
3、a模式:只追加写模式
文件不存在则创建一个文件,并且文件指针跳转到文件末尾
文件存在,会将文件指针跳转
6. b:bytes二进制模式,该模式下操作文件内容的单位是bytes,该模式适用所有类型文件
强调:一定不能指定enconding参数
with open('c.txt',mode='rb') as f:
data=f.readline()
print(data)
res=data.decode('utf-8')
print(res)
cp拷贝文件需求:
1. 遍历文件内容方式
with open('c.txt',mode='rt',encoding='utf-8')as f:
for item in f:
print(item,end='')
with open('c.txt',mode='rb')as f:
print(f.readline())
print(f.readline())
执行结果:
Import使用:
import sys
print(sys.argv)
结果显示:
import sys
print(sys.argv[1])
print(sys.argv[2])
显示结果:
Cp直接写死方法
with open(r'E:\Python_exercise\day3\1.mp4',mode='rb') as read_f,\
open(r'E:\1.mp4',mode='wb') as write_f:
for line in read_f:
write_f.write(line)
增加灵活输入地址修改方法:
src_file_path=input('原文件路径>>>:').strip()
dst_file_path=input('目标文件路径>>>:').strip()
with open(r'%s' %src_file_path,mode='rb') as read_f,\
open(r'%s' %dst_file_path,mode='wb') as write_f:
for line in read_f:
write_f.write(line)
import sys
src_file_path=sys.argv[1]
dst_file_path=sys.argv[2]
with open(r'%s' %src_file_path,mode='rb') as read_f,\
open(r'%s' %dst_file_path,mode='wb') as write_f:
for line in read_f:
write_f.write(line)
文件内指针操作(掌握)
f.seek(3,2):单位统一是字节
第一个参数:控制移动的字节数
第二个参数:控制移动的参照物,值可以为0,1,2
0:参照文件开头(在t模式和b模式下都能使用)
强调:除了0模式以外的模式都只能再b模式下使用
1:参照当前位置(只能在b模式下使用)
2:参照文件末尾(只能在b模式下使用)
with open('c.txt',mode='r',encoding='utf-8') as f:
f.seek(3,0)
print(f.read())
执行结果:
read(n)
read的n在t模式下代表的是字符个数
read的n在b模式下代表的是字节个数
其余所有文件内指针移动都是以字节为单位
with open('c.txt',mode='rb')as f:
print(f.read(3))
print(f.read(3).decode('utf-8'))
执行结果:
参照文件末尾(只能在b模式下使用)
with open('c.txt',mode='rb')as f:
f.seek(-3,2)
print(f.read().decode('utf-8'))
执行结果:
修改文件直接内存修改方法::
文件编辑器修改文件原理:
1、 先将文件内容全部读入内存
2、 在内存中修改完毕
3、 将修改的结果覆盖会写硬盘
缺点:占用内存过高
优点:在修改期间,硬盘同一时刻只有一份数据
with open('d.txt',mode='rt',encoding='utf-8')as f :
data=f.read()
new_data=data.replace('frank','sunny')
print(new_data)
with open('d.txt',mode='wt',encoding='utf-8') as f:
f.write(new_data)
修改文件临时文件覆盖方法:
1、 一行一行读,一行一行该
2、 以读的模式打开文件,以写的模式打开另外一个文件
3、 然后用for循环读取一行一行内容,每读一行修改一行,将修改结果写入
临时文件,直到把文件遍历完成
4、 删除源文件,将临时文件修改源文件
优点:同一时刻在内存中只存在一行内容
缺点:在修改期间,硬盘同一数据会保留两份
import os
with open('db.txt',mode='rt',encoding='utf-8') as src_f,\
open('.db.txt.swap',mode='wt',encoding='utf-8') as temp_f:
for line in src_f:
if 'frank' in line:
line=line.replace('frank','sunny')
temp_f.write(line)
os.remove('db.txt')
os.rename('.db.txt.swap','db.txt')
1、 什么是函数
函数就是具备一功能的工具
函数必须遵循先定义,后调用原则
事先准备的工具即函数定义
拿来就是即函数调用
函数分为两大类:
内置函数
自定义函数
2、 为什么要用函数
2.1、程序的组织结构不清晰、可读性差
2.2、日记月累冗余代码过多
2.3、程序可扩展性差
3、 怎么用
1、 定义函数
1.1、语法:
Def 函数名(参数1,参数2…)
“””
文档注释
“””
code1
code2
……….
renturn 返回值
1.2定义函数阶段发生的事:只检测语法,不执行代码
def foo(): #foo函数内存地址
print('hello1')
print('hello2')
print('hello3')
print(foo)
foo()
# 示范一
def bar():
print('from bar')
def foo():
print('from foo')
bar()
foo()
执行结果显示:
1.3定义函数的三种形式
1.3.1无参函数
def func1():
print(‘hello1’)
print(‘hello2’)
print(‘hello3’)
1.3.2有参函数
def fuc2(x,y):
if x>y:
print(x)
else:
print(y)
fuc2(1,3)
1.3.3空函数
def func3():
pass
2、 调用函数
2.1、语法函数名()
2.2调用函数发生什么事
2.2.1根据函数名找到函数内存地址
2.2.2函数地址加上括号可以触发函数体执行代码
2.3调用函数的三种方式:
def f1():
print('from 1')
f1()
表达式形式:
def fuc2(x,y):
if x>y:
return x
else:
return y
res=max(1,2)
print(res)
1、什么事函数的返回值
函数的返回值是函数体运行代码的成果
2、什么时候用返回值
3、如何用返回值
return 值:
1、 返回值没有类型限制
2、 返回值没有个数限制
逗号多个值:返回一个元组
一个值:返回一个值
没有return:默认返回None
return是函数结束的标志:
函数内可以有多个return,但只要执行一次,整个函数就会立即结束,并且将return后的值当做本次调用结果的返回