def test_return():
return 1, 2, 3
x, y, z = test_return()
print(x) # 1
print(y) # 2
print(z) # 3
def user_info(name, age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
user_info('小明', 20, '男')
# 使用关键字传参可不必遵守位置
user_info(age = 11, name='小王', gender='女')
#
user_info('甜甜', gender='女', age = 10)
输出:
姓名是:小明, 年龄是:20, 性别是:男
姓名是:小王, 年龄是:11, 性别是:女
姓名是:甜甜, 年龄是:10, 性别是:女
函数默认第一个默认参数后面必须都有默认参数:
# 错误
def user_info(name='', age, gender):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 正确
def user_info1(name, age=0, gender=''):
print(f"姓名是:{name}, 年龄是:{age}, 性别是:{gender}")
# 不定长的形式参数会作为元组存在,接收不定长数量的参数传入
def user_info(*args):
print(f"args参数的类型是:{type(args)}, 内容是:{args}")
user_info(1, 2, 3, '小明', '男孩')
# ** 表示不定长参数必须是字典元素(kv)
def user_info(**kwargs):
print(f"args参数的类型是:{type(kwargs)}, 内容是:{kwargs}")
user_info(name = '小王', age = 22, gender = '男孩')
输出:
args参数的类型是:
args参数的类型是:
lambda
函数最多只能写一行代码
def test_func(compute):
result = compute(1, 2)
print(f"结果是:{result}")
# lambda默认把冒号后的表达式返回,匿名函数
test_func(lambda x, y: x + y)
输出:
结果是:3
f = open("D:/cplusplus/00个人笔记/python学习/python-learn/测试01.txt", "r", encoding="UTF-8")
print(type(f))
# 读取文件
print(f"读取10个字节的结果是:{f.read(10)}")
# 如果上一次读完后内部指针会进行偏移导致下一次read 从上一次read结尾开始
print(f"读取全部内容的结果是:{f.read()}")
# 读取全部行
lines = f.readlines()
print(f"lines对象类型{type(lines)}")
print(f"lines内容是{lines}")
# 单行读取
line1 = f.readline()
line2 = f.readline()
line3 = f.readline()
print(f"第一行数据:{line1}")
print(f"第二行数据:{line2}")
print(f"第三行数据:{line3}")
# for循环读取文件行
for line in f:
print(f"每行数据为:{line}")
# 文件关闭
f.close()
# with open 帮助我们在使用文件对象后自动close
with open("D:/cplusplus/00个人笔记/python学习/python-learn/测试01.txt", "r", encoding="UTF-8") as f:
for line in f:
print(f"每一行的数据是:{line}")
直接调用write
,只是将内容写到内存缓冲区中,当调用flush
时,才会真正写入文件。这样可避免频繁操作硬盘
# 若test.txt不存在则会创建该文件
# 若文件已存在,则会清空内容再写入
f = open("test.txt", "w", encoding="UTF-8")
f.write("hello world22!!") # 写入到内存中
f.flush() # 刷盘
f.close() # close 包含了 flush的调用
有份账单文件 bill.txt 如下,我们要将其最后一列为正式的行写入新的备份文件 bill.txt.bak
name,date,money,type,remarks
周杰轮,2022-01-01,100000,消费,正式
周杰轮,2022-01-02,300000,收入,正式
周杰轮,2022-01-03,100000,消费,测试
林俊节,2022-01-01,300000,收入,正式
林俊节,2022-01-02,100000,消费,测试
林俊节,2022-01-03,100000,消费,正式
林俊节,2022-01-04,100000,消费,测试
林俊节,2022-01-05,500000,收入,正式
张学油,2022-01-01,100000,消费,正式
张学油,2022-01-02,500000,收入,正式
张学油,2022-01-03,900000,收入,测试
王力鸿,2022-01-01,500000,消费,正式
王力鸿,2022-01-02,300000,消费,测试
王力鸿,2022-01-03,950000,收入,正式
刘德滑,2022-01-01,300000,消费,测试
刘德滑,2022-01-02,100000,消费,正式
刘德滑,2022-01-03,300000,消费,正式
# 打开读取文件的对象
fr = open("bill.txt", "r", encoding="UTF-8")
# 打开写入文件的对象
fw = open("bill.txt.bak", "w", encoding="UTF-8")
for line in fr:
line = line.strip() # 去除前后空格以及换行
if line.split(",")[4] == "测试":
continue;
fw.write(line)
# 由于前面strip操作导致换行符被去掉,这里要手动再添加
fw.write("\n")
fr.close()
fw.close()
try:
# 1/0 # 这是 ZeroDivisionError 异常,不会捕获,直接出错终止程序
print(name)
# 捕获NameError异常,别的异常不会捕获
except NameError as e:
print("出现了变量未定义异常")
print(e)
输出:
出现了变量未定义异常
name ‘name’ is not defined
# 捕获多个异常
try:
1/0
print(name)
# 捕获NameError异常,别的异常不会捕获
except (NameError, ZeroDivisionError) as e:
print("出现了变量未定义异常")
print(e)
finally
不管有没有异常都执行,else
是不发生异常时执行,是可选项
try:
f = open("aa.txt", "r", encoding="UTF-8")
except Exception as e:
print("文件不存在,改为w模式打开")
f = open("aa.txt", "w", encoding="UTF-8")
else:
print("没异常")
finally:
print("有没有异常都要执行")
f.close()