2/24课后总结
练习题
def copy(address):
"""
获取文件的二进制码
:param address: 传入文件的地址
:return: 解码后的二进制码
"""
with open(address, 'rb') as f:
return f.read()
def paste(address):
"""
根据获取到的二进制码粘贴成对应的文件
:param address: 传出的文件的地址
:return: 无
"""
copy_address = input('请输入复制的文件地址>>>')
with open(address, 'wb') as f:
f.write(copy(copy_address))
address = input('请输入粘贴的文件地址>>>')
paste(address)
文件
二进制读操作
with open(address, 'rb') as f:
return f.read(3).decode('utf-8')
"""
r模式下read()里数字是字符b模式是字节
"""
移动指针
with open('a.txt', 'rb') as f:
print(f.read(12).decode('utf-8'))
f.seek(3,0) # 从文件的开头开始移动三个字节
f.seek(3,1) # 从文件当前位置开始移动三个字节
f.seek(-3,1) # 从文件当前位置开始向左移动三个字节
f.seek(-3,2) # 从文件最后开始向左移动三个字节
print(f.read().decode('utf-8'))
修改
# 方式一:
# 1. 读取b.txt文件数据
with open('b.txt', 'r', encoding='utf-8') as f:
data = f.read()
print(data) # kevin kevin kevin kevin say hello world
new_data = data.replace('kevin', 'jack')
# 2. 把新的数据再次写入文件
with open('b.txt', 'w', encoding='utf-8') as f1:
f1.write(new_data)
# 方式二:
import os
with open('a.txt','rt',encoding='utf-8') as read_f:
with open('b.txt',mode='wt',encoding='utf-8') as wrife_f:
for line in read_f:
wrife_f.write(line.replace('SB','kevin'))
os.remove('a.txt') # 删除源文件
os.rename('b.txt','a.txt')
函数
l = [1, 2, 3, 4, 5, 6]
不使用len(i),求列长
count = 0
for i in l:
count+=1
print(count)
count = 0
def len1(x):
for i in x:
count+=1
return count
"""
平时写代码,就如同上面一样,一段代码只能给一个列表或者一个对象使用,如果需要球的不止一个列表呢
l1 = [1, 2, 3, 4, 5, 6]
l2 = [1, 2, 3, 4, 5, 6]
l3 = [1, 2, 3, 4, 5, 6]
这时候就需要函数了
print(len1(l1))
print(len1(l2))
print(len1(l3))
方便快捷,可多次使用代码行数少
"""
语法结构
def len1(x):
"""
此函数可以求出给定的值的长度
:param x: 需要求长度值如列表字符串字典等
:return: 返回所求出的长度
"""
count = 0
for i in x:
count += 1
return count
"""
def:声明一个函数,不可省略
len1(): 函数名,不可省略,括号也不可
x:自定义参量,可以省略
""""""在此之间的是函数注释一般都是在函数体之前,可以省略,但是不推荐方便他人也方便自己再次查看
count = 0
for i in x:
count += 1 函数体,函数的核心部分,一个函数可以做什么事都是由此决定
return count :函数的返回值,可以省略,不写或只写return默认返回None
"""
定义与调用
# 函数一定是两个阶段:定义,调用
#####################必须掌握###########################################
1. 函数必须先定义,后调用
2. 函数在定义阶段,如果有参数,调用阶段也需要给对应的参数
3. 函数在定义阶段只检测语法是否正确,不执行具体的代码功能
4. 函数在调用阶段会执行具体的函数体代码
5. 如何调用函数?# 函数名()
#####################必须掌握###########################################
函数的底层原理:
1. 申请一块内存空间,存储函数体代码
2. 把函数体代码绑定给函数名
3. 通过调用函数(函数名())来执行函数体代码
分类
1. 内置函数
# 如print,input 等一系列python解释器中已经存在可以直接调用的函数
2. 无参函数
def add(): # add()中啥也没得
y = 1+1
return y
print(add())
3. 有参函数
def add(a,b): # add()中有参数,多少个都可以用逗号隔开
y = a+b
return y
print(add(1,2))
3.3 有参函数特殊型
def add(a=1,b=2): # 参数可以在定义时就赋一个默认值
y = a+b
return y
print(add()) # 如果定义时是带默认值的参数调用时可以不传参
print(add(b=3,a=5)) # 调用传参时如果加了等号可以不管形参的顺序先后
4. 空函数
def add():
pass # 什么功能都没得
返回值
def x():
return '123'
print(type(x())) # <class 'str'>
def x1():
return [1, 2, 3]
print(type(x1())) # <class 'list'>
def x3():
return 123
print(type(x3())) # <class 'int'>
"""
返回值就是函数执行完毕后返回的结果,可以返回任何类型的结果
不写return或者只写个return关键字都是默认返回None
return可以返回多个值要用逗号隔开,默认是元组,也可以使用容器类型包装
函数执行中遇到return直接结束函数的运行不执行return之后的代码
return只能出现在函数中
"""