递归
递归的特点:
1. 函数内部自己调用自己
2. 必须要有出口
递归案例
def sum_numbers(num):
# 2. 出口
if num == 1: # 将 if 则两行注释后则会提示 超出最大出口的错误
return 1
# 1. 函数内部自己调用自己
return num + sum_numbers(num-1)
result = sum_numbers(3)
print(result)
# 没有出口,则会报错, 错误提示是超出了最大出口
1. lambda 匿名函数 作用: 简化函数代码
# lambda 匿名函数
# 1. 不带参数
test = lambda: 100
print(test) # 输出 test 的内存地址
print(test()) # 输出值
# 2. 带参数
test = lambda a, b: a + b
print(test) # 输出 test 的内存地址
print(test(2, 3)) # 输出值
2. lambda 参数形式
# 1. 无参数
fn1 = lambda: 100
print(fn1())
# 2. 一个参数
fn2 = lambda a: a
print(fn2('hello world'))
# 3. 默认参数 (缺省参数)
fn3 = lambda a, b, c=100: a + b + c
print(fn3(10, 20))
print(fn3(10, 20, 200))
# 4. 可变参数:*args 返回的是 元组
fn4 = lambda *args: args
print(fn4(10, 20))
# 5. 可变参数:**kwargs 返回的是 字典
fn5 = lambda **kwargs: kwargs
print(fn5(name='python', age=18))
# 6. 带判断的lambda
fn6 = lambda a, b: a if a > b else b
print(fn6(1000, 500))
3. abs() 和 round() 和 高阶函数
# abs(): 求绝对值
print(abs(-10))
# round(): 四舍五入
print(round(1.2))
print(round(1.9))
# 普通函数
def add_num(a, b):
return abs(a) + abs(b)
result = add_num(-1, -2)
print(result)
# 高阶函数
def sum_num(a, b, f):
return f(a) + f(b)
result1 = sum_num(1.2, 3.6, round)
print(result1)
result2 = sum_num(-1, -1, abs)
print(result2)
# 高阶函数 map()使用
list1 = [1, 2, 3, 4, 5]
def func(x):
return x ** 2
result = map(func, list1)
print(result) # 返回 内存地址
print(list(result)) # 注意:list表示转化为列表数据 [1, 4, 9, 16, 25]
# 高阶函数 reduce()使用 reduce作用: 将数据累加
import functools
list2 = [1, 2, 3, 4, 5]
def func2(a, b):
return a + b
result2 = functools.reduce(func2, list2)
print(result2) # 15
# 高阶函数 filter()使用 filter作用: 过滤掉不需要的数据, 返回一个新的 filter 对象
list3 = [1, 2, 3, 4, 5, 6, 7, 8, 9, 10]
def func3(x):
return x % 2 == 0
result3 = filter(func3, list3)
print(result3)
print(list(result3)) # list 将数据转化为 列表 [2, 4, 6, 8, 10]
4. 文件操作
# 1. 打开 open()
f = open('test.txt', 'w')
# 2. 读写操作 write() read()
f.write('创建一个test.txt新文件zz')
# 3. 关闭 close()
f.close()
文件访问模式
# r 只读 如果文件不存在,报错 不支持写入操作,表示只读
# w 只写 如果文件不存在,新建文件 执行写入,会覆盖原有内容
# a 追加 如果文件不存在,新建文件 在原有内容基础上,追加新内容
# 访问模式可以省略, 省略后默认为 r 只读
\n 换行 会占用一个字符
# 1. 打开 open()
f = open('test.txt', 'a+') # a 表示追加 指针在最后
# seek() 改变指针的位置
f.seek(0, 0) # 或者 f.seek(0)
# 2. 读写操作 write() read()
con = f.read()
print(con)
# 3. 关闭 close()
f.close()
5. python 代码文件备份
# 1. 需要备份 的文件 sound.txt.mp3
old_name = input('请输入需要备份的文件名:')
print(old_name)
# 2. rfind 获取 . 的下标 (获取 .的下标)
index = old_name.rfind('.')
print(index)
# 3. 截取字符串 [开始:结束:步长]
print(old_name[:index]) # 文件名
print(old_name[index:]) # 后缀
if index > 0:
postfix = old_name[index:]
# 4. 将 文件名转化为 文件名 + [备份] +后缀
new_name = old_name[:index] + '[备份]' + postfix
print(new_name)
# 备份文件
old_f = open(old_name, 'rb')
new_f = open(new_name, 'wb')
while True:
con = old_f.read(1024)
# 判断字符写入是否完毕,结束就终止循环
if len(con) == 0:
break
# 将 文件内容写入到 新文件中
new_f.write(con)
# 关闭文件
old_f.close()
new_f.close()