函数
递归函数
什么是递归函数?
在一个函数的内部调用自身的函数,称为递归函数。
注意:
分解:原问题可以分解为若干个子问题,且子问题为原问题较小规模的实例。
解决:递归求解子问题,当子问题的规模足够小,则直接求解。
合并:将子问题的解一层层的合并返回,直到返回结束,得到原问题的解
由上可以得到,递归必须要有一个结束条件(规模足够小,直接求解),而且需要一个递归的公式(子问题为原问题较小规模的实例)。满足以上条件才是一个合理的递归函数,否则容易出现死循环。
匿名函数
匿名函数又称lambda 表达式 或 lambda 函数,可以作为参数传递。
格式: lambda 参数列表 : 表达式
为列表中的字典排序问题
tmp_list = [{"name": "dragon", "age": 18}, {"name": "Dragon", "age": 20}]
tmp_list.sort(key=lambda x: x["name"]) # 根据name 键排序
print(tmp_list)
tmp_list.sort(key=lambda x: x["age"]) # 根据age 键排序
print(tmp_list)
列表推导式
作用:轻量级循环创建列表
定义格式: tmp_list = [表达式 for 临时变量 in range(起始位置,结束位置,步长)]
有列表 [1,2,3,...10],将其变成[[1,2,3],[4,5,6],[7,8,9],[10]]
# 首先生成[1,2,3,...10]
a = [x for x in range(1, 11)]
print(a)
# 然后通过列表推导式产生下标,
# 通过表达式 使用下标 对a进行切片
# 得到目标列表
b = [a[x:x + 3] for x in range(0, len(a), 3)]
print(b)
文件
为什么需要文件?
因为文件可以长期保存数据,省时省力。
文件的操作
文件的操作有 打开、关闭、读取、写入。
路径
访问文件需要知道文件的位置,也就是文件的路径。
路径分为绝对路径和相对路径。
绝对路径
绝对路径是指从根目录开始的路径,win可以理解为从盘符开始的路径。
相对路径
一般是相对于当前目录(或文件夹)的路径,不是从根目录开始的路径,win不是从盘符开始的路径。
文件的访问模式
主要的 r(只读)、w(只写)、a(追加)
-
r 模式
- 默认模式,只读模式
- 文件不存在,则程序报错
- 文件存在,可以进行读取
-
w 模式
- 只写模式
- 文件不存在,则创建一个新文件进行写入
- 文件存在,每次打开都覆盖原文件,然后写入。
-
a 模式
- 追加模式,特殊的 w 模式
- 文件不存在,则创建一个新文件进行写入
- 文件存在,没有内容,则直接写入;有内容存在,在内容的末尾,进行追加写入。
打开与关闭文件
import os
# 文件路径
file_path = "DragonFang.txt"
src_name = None
# 是不是一个文件
if os.path.isfile(file_path):
src_name = open("DragonFang.txt") # 是文件直接打开,默认r 模式
else:
src_name = open("DragonFang.txt", "w") # 不是文件,创建文件
src_name.close() # 使用完关闭文件
写入与读取文件
write()
向文件中写入内容。
f = open('DragonFang.txt', 'w') # 以只写模式打开
f.write('Hello DragonFang!') # write 将文件内容写入文件
f.close() # 关闭文件
读取
-
read()
- 一次性读取全部内容
- 在一次打开操作之后,多次read(),除了第一次可以得到内容,其它得到的都是空字符串
-
read(x)
- 一次性读取 x 个字节的内容
- 在一次打开操作之后,且内容读取完毕,再次使用read(x) ,将得到空字符串
-
readline()
- 一次性读取一行的内容
- 在一次打开操作之后,且内容读取完毕,再次使用readline(),将得到空字符串
-
readlines()
- 一次性读取全部内容,放到一个列表中,每一行的内容当做列表的一个元素
- 在一次打开操作之后,多次readlines(),除了第一次可以得到内容,其它得到的都是空列表
文件的相关操作
import os
# 文件的相关操作
# 文件的重命名,原文件不存在报错
os.rename("Dragon.txt", "DragonFang.txt")
# 删除文件,文件不存在报错
os.remove("Dragon.txt")
# 判断指定资源是不是一个文件,是返回True,不存在不报错
os.path.isfile("Dragon.txt")
文件夹的相关操作
import os
# 创建文件夹,当文件夹不存在时创建,文件夹存在时报错
os.mkdir("Dragon")
# 删除文件夹,当文件夹存在时删除,文件夹不存在时报错
os.rmdir("Dragon")
# 获取当前工作目录
os.getcwd()
# 改变默认工作目录,"./" 表示当前目录 "../"表示上级目录
os.chdir("../")
# 获取目录列表
os.listdir("./")
# 判断指定路径是不是文件夹,是返回True,路径不存在不会报错
os.path.isdir("")
到此结 DragonFangQy 2018.4.7