一、编码类型
1、py3 中所有文件默认编码是utf-8 是在硬盘中的存储, 中文占三个字节,英文占一个
内存中所有字符都是unicode unicode是万国码 在内存中存储,中英都是两个
2、在py2中是解码的过程,在py3中自动 # -*-encoding:gbk -*- s = "哈哈哈"
print(s)
gbk_2_ubicode = s.decode("gbk")
print(gbk_2_ubicode)
3、字节类型( bytes )
(1)、就是二进制,用十六进制看着好计算
b'\xc2\xb7\xc9\xe3'( bytes类型 ) 一个\x是一个字节
二、文件操作
1、f=open(filename) //打开文件
2、f.write("我是好人") //写操作
3、f.read() //读操作
4.close() //保存并退出
5、文本打开模式
r 只读模式 w创建模式,如果文件已在,则覆盖旧文件 a追加模式,新数据写在文件末尾
写和读不能同时 f.readline() #只读一行
f = open("name_list",mode="w")
f.write("张三")
f.write("李四")
f.write("哈哈哈")
f.close()
f = open("name_list",mode="a")
f.write("张三")
f.write("李四")
f.write("哈哈哈")
f.close()
2021-03-10 15:44:12
一、文件
line = line.split() #把line中的一个个的小字符串变成小列表可以单独调出来
int ( line[3] ) #把line中的第四个字符串变成数字形的
name = None #表示给name一个空值-->name = ""
encoding=None #告诉解释器,当前打开的文件是什么编码
如果是None,则编译器默认编码是UTF_8
二、视频图片操作
rb 二进制只读模式
wb 二进制创建模式,若文件存在,则覆盖旧文件
ab 追加模式,新数据写在文件末尾
这样读出来的数据就是bytes类型
f = open("QQ截图20210303200725.png","rb") #读图片 for line in f: print(line)
f = open("_file","wb") s = "魏" f.write(s.encode("utf-8"))#把f的文件类型变成utf-8的形式,编译器可以识别
2021-03-11 21:44:09
windows 中的、\n占两个byte mac是基于Linux,占一个byte
f = open("seek_write","w")#写文件seek_write f.write("hello\n") #写hello print("返回光标位置",f.tell()) #返回光标的当前位置 f.seek(10) #让光标到第十个字节处 f.write("-----------") #覆盖之前的内容
cpu | 内存 | 硬盘 |
速度快 | 中等 | 慢 |
要从内存中向硬盘中存数据,因为硬盘太慢,就有了buffer(就像是临时的水桶,水满了就向硬盘中放一次)
f.flush() #强制进入硬盘中
2021-03-12 15:57:26
一、文件混合模式
w+ 写读(没啥用)
r+ 读写(有点用)
a+ 追加读(文件一打开光标在最后面,写的数据全是追加的形式)
二、文件修改
不是覆盖,而是往后挤
- 发开文件,把内容加载到内存中
f = open("wenjian","r+") #读写wenjian #第一步 加载到内存 date = f.read() #把f中全部的数据都放到内存中 new_date = print( date.replace("哈哈哈",“嘿嘿嘿”) ) #用嘿嘿嘿把哈哈哈替换 #第二部 清空文件 f.seek(0) #先把光标移到开头 f.truncate() #截断文件 把光标后面的数据都删除 f.truncate(100)就是从0开始100个字节保存 #第三步 把新内容写回硬盘 f.write(new_date) f.close
函数编程
def 函数名(): #和c语言差不多
·语句- 默认参数
def stu_register(name, age, course, country = "CN"): print("姓名", name) print("年龄", age) print("国籍", country) print("课程", courage) #国籍默认是CN,默认函数一定要在最后 stu_register("张三", 12, python); stu_register("李四", 32, java ,country = "JP"); stu_register("李四", 32, java ,"JP"); #都对
-
位置参数 关键参数
stu_register("李四", course = "python", age = 23 ,country = "JP");
位置参数 关键参数
位置参数要放在最前面 - 非固定参数
- 要是不知道有几个参数就用这个
def stu_register(name, age, course, *args)
stu_register(name, age, course, args[0] ) #可以不写,写的内容都在args中
- **
- 要是不知道有几个参数就用这个
- 函数 中断的参数调用时可以不按照顺序
-
在 python 中,类型属于对象,变量是没有类型的:
a=[1,2,3] a="Runoob"
- 不定长参数
def printinfo( arg1, *vartuple ): "打印任何传入的参数" print ("输出: ") print (arg1) print (vartuple) # 调用printinfo 函数 printinfo( 70, 60, 50 )
函数中变量的名会在字典中储存起来
- 函数参数用**写出来就是以字典的形式导出
-
如果单独出现星号 * 后的参数必须用关键字传入。
>>> def f(a,b,*,c): ... return a+b+c ... >>> f(1,2,3) # 报错 Traceback (most recent call last): File "<stdin>", line 1, in <module> TypeError: f() takes 2 positional arguments but 3 were given >>> f(1,2,c=3) # 正常 6
-
匿名函数 lambda
lambda [arg1 [,arg2,.....argn]]:expression
# 可写函数说明 sum = lambda arg1, arg2: arg1 + arg2
# 调用sum函数 print ("相加后的值为 : ", sum( 10, 20 ))
print ("相加后的值为 : ", sum( 20, 20 )) -
强制位置参数
Python3.8 新增了一个函数形参语法 / 用来指明函数形参必须使用指定位置参数,不能使用关键字参数的形式。
在以下的例子中,形参 a 和 b 必须使用指定位置参数,c 或 d 可以是位置形参或关键字形参,而 e 或 f 要求为关键字形参:def f(a, b, /, c, d, *, e, f): print(a, b, c, d, e, f)
以下使用方法是正确的:
f(10, 20, 30, d=40, e=50, f=60)
以下使用方法会发生错误:
f(10, b=20, c=30, d=40, e=50, f=60) # b 不能使用关键字参数的形式 f(10, 20, 30, 40, 50, f=60) # e 必须使用关键字参数的形式