一、文件的高级应用
# r/w/a
# # 即可读又可写(尽量不要使用) # r+ 是在后面追加
with open('test.py', 'r+', encoding='utf8') as fr:
data = fr.read()
print(fr.writable())
fr.write('x = 10')
print(data)
# # 清空文件的功能是w提供的, w+更不要使用
with open('test.py', 'w+', encoding='utf8') as fr:
print(fr.readable())
fr.write('x = 10')
data = fr.read()
print(data)
# a有追加的功能,a的指针在末尾,a+功能也没用
with open('test.py', 'a+', encoding='utf8') as fr:
fr.seek(1, 0)
data = fr.read() # 指针在末尾
print(data)
fr.write('x = 10')
fr.flush()
# seek()、tell()、read()、truncate() 只需了解
二、文件修改的两种方式
# 文件没有修改这一说,只有覆盖这一说
import os
# 一次性修改全部
with open('test.py', 'r', encoding='utf-8') as fr,\
open('test_swap.py', 'w', encoding='utf-8') as fw:
data = fr.read()
data = data.replace('sb', 'dsb')
fw.write(data)
os.remove('test.py') # 删除文件
os.rename('test_swao.py', 'test.py') # 重命名文件
# 一边读一边改
with open('test.py', 'r', encoding='utf-8') as fr,\
open('test_swap.py', 'w', encoding='utf-8') as fw:
for line in fr:
line = line.replace('sb', 'dsb')
fw.write(f'{line}\n')
os.remove('test.py') # 删除文件
os.rename('test_swap.py', 'test.py') # 重命名文件
三、函数的定义
'''
def 函数名(): # 定义阶段(造车轮阶段)
"""函数注释写在这里""" # 函数相当于工具, 注释相当于工具的说明书
<代码块>
# 使用 # 调用阶段(开车阶段)
函数名()
'''
1.函数的三种定义方式
# 参数,未知数,变量
# 1.无参函数 # 工具可以单独使用
def add():
"""无参函数"""
x = input('num1:')
y = input('num2:')
print(int(x) + int(y))
# 2.有参函数
def add(x, y): # 我这个工具不能单独使用,必须得加个配件,才能使用
"""有参函数"""
print(int(x) + int(y))
print(1)
x = input('num1:')
y = input('num2:')
add(x, y)
# 3.空函数: 定义了函数,啥都没有
def func(): # 只知道工具叫什么名字,但不知道如何造出这个工具
pass
2.函数的调用
def add(x, y):
return x+y
res = add(10, 20) # 函数的调用
print(res*12)
3.函数的返回值
def add(x, y):
# return (x, y, x + y) # return可以返回任意数据类型
return x, y, x + y # return可以返回任意数据类型,不加括号返回多个值时,默认用元祖的形式返回
x,y,z = add(1, 2)
print(x,y,z)
4.函数的参数
def add(num1, num2): # 形参
"""有参函数"""
print(int(num1) + int(num2))
add(1, 2) # 实参
# 形参: 定义阶段才有形参,形式参数,啥也没用,只是占个位置,具有描述意义
# 实参: 调用阶段才有实参,实际的参数,具有具体的值
# 位置形参: 一个一个的写形参,就叫位置形参
def add(num1, num2): # 形参
"""有参函数"""
print(num1)
print(num2)
print(int(num1) + int(num2))
# 位置实参: 一个一个写过去,就叫位置实参
# add(1, 2) # 实参
# 两个位置形参,就必须得要两个位置实参对应,从左到右一一对应
# 默认形参: 不需要传参,可以使用默认值; 传参就使用你传的值, 默认形参必须放到位置形参后面
def shopping(name='nick'): # 形参经常会引用同一个值
goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
print(f'恭喜你这个小钢炮{name},得到{goods_dict[1]}一个')
shopping('yongjiu')
# 关键字实参: 按照形参名给定具体的值,可以打破位置形参必须得一一对应传值的规定,位置实参必须在关键字实参之前
def shopping(x, name='nick'):
goods_dict = {1: '特斯拉', 2: '奔驰', 3: 'nick'}
print(f'恭喜你这个小钢炮{name},得到{goods_dict[x]}一个')
shopping(1, name='yongjiu')
# 函数的参数尽量不要超过3个
# 需要的用的时候用,一般用位置形参+位置实参