前言
Python系列文章主要是记录自己学习成果及知识输出整合,提供一个温故而知新的场所。
本篇主要记录Python的函数嵌套、递归、os模块文件处理。
一、函数嵌套
函数体中调用其他函数(可以调用自己)
def a():
print('这里是a函数')
def b():
a()
print('这里是b函数')
# 以上b函数的函数体里面调用了函数a,就称为嵌套。
# 在函数里面再定义函数
def c():
def d():
print('这里是d函数')
return d
#那如何调用呢?
value = c() #这里value所接收到的值就是函数d,但要执行函数d那么就要加上括号
value()
# 也可接收函数名
def e(a):
a()
print('这里是e函数')
e(b)
# 函数可以作为返回值也可以作为函数的参数
二、Python递归函数
递归函数:函数体中调用自己本身,也属于函数嵌套的一种
'''
递归函数:自己调用自己本身函数
注意:1、结束条件
2、递推的条件
'''
# 示例:计算阶乘
def sample(n):
if n == 1: # 结束条件
return 1
return n*sample(n-1) # 递推条件
# 假设输入的值是5
# 因为5不为1所以
sample(5)=5*sample(5-1)
# 又因为sample(5-1)中n=4,也不等于1,故
sample(5) = 5*4+sample(4-1)
# 以此类推,当n减到1时 跳出函数,也就不在循环
sampl(5) = 5*4*3*2*1 =120
# 示例:斐波那契数列:1,1,2,3,5,8,13......n
# 假设传入的值是3,那么应该输出2,第三个数值是2,如果传入4应该输出3
def fbnq(n):
# 分析数列的规律,如果n=1,那么输出1,
# n=2,也是输出1,所以停止条件就是 n == 1 or n == 2:
if n == 1 or n == 2:
return 1
# 前面是n=1或n=2,那么n=3,就是前面两个之和也就是n-1,n-2的和
return fbnq(n-1) + fbnq(n-2)
# 以下使用遍历的方式,就可展示整个数列
num = []
for i in range(1, 5):
num.append(fbnq(i))
print(num)
三、os文件处理
文件处理流程,跟我们常规手动操作文件一样:
- 打开文件
- 对文件句柄进行相应的操作
- 关闭文件
'''
open 内置函数,open底层调用的是操作系统接口
f1文件句柄。对文件进行的任何操作,都得通过文件句柄的方式
encoding:可以不写,不写参数,默认编码本:操作系统默认的编码
windows:gbk
Linux: utf-8
mac:utf-8
f1.close(): 关闭文件句柄
'''
# 打开文件 open(),获取文件内容(对文件进行读操作)
file = 'D:\\test.txt'
f1 = open(file, 'r')
result = f1.read() # read()是读取内容的函数
print(result)
f1.close()
# 打开文件 open(),对文件新增内容(对文件进行写操作)
f = open(file ,mode='w')
f.write('sdd') # write() 是写入内容的函数
f.close()
# 另一种打开文件的方式,更便捷,防止前一种忘记写close()函数,导致占用系统内存
with open('D:\\test.txt') as f1:
print(f1.read())
mode参数
参数值 | 释义 |
---|---|
r | 以只读方式打开文件。文件的指针将在文件开头。这是默认模式 |
rb | 以二进制格式打开一个文件用于只读。一般用于非文本文件如图片等 |
r+ | 打开一个文件用于读写(文件的指针将在文件的开头) |
w | 打开一个文件只用于写入,如果文件存在,删除重新编辑,否则新建 |
wb | 以二进制格式打开一个文件只用于写入 |
w+ | 打开一个文件用于读写,如果文件存在,删除重新编辑,否则新建 |
a | 打开文件追加内容,存在文件,在文件原内容后增加,否则新建写入 |
a+ | 打开一个文件用于读写,存在文件,在文件原内容后增加,否则新建写入 |
ab | 以二进制格式打开一个文件用于追加。存在文件,在文件原内容后增加,否则新建写入 |
ab+ | 以二进制格式打开一个文件用于读写。存在文件,在文件原内容后增加,否则新建写入 |
"""
示例:
文件的改的操作
1.以读的模式打开原文件
2.以写的模式创建一个新文件
3.将原文件的内容读出来修改成新内容,写入新文件
4.将原文件删除
5.将新文件重命名成原文件
"""
# 普通版
# 1.以读的模式打开原文件
# 2.以写的模式创建一个新文件
with open(file, encoding='utf-8') as f1,open(file+'.bak', encoding='utf-8', mode='w') as f2:
# 3.将原文件的内容读出来修改成新内容,写入新文件
old_content = f1.read()
new_content = old_content.replace('sd', '不要')
f2.write(new_content)
# 4.将原文件删除
os.remove(file)
# 5.将新文件重命名成原文件
os.rename(file+'.bak', file)
# 进阶版
# 1.以读的模式打开原文件
# 2.以写的模式创建一个新文件
time.sleep(2)
with open(file, encoding='utf-8') as f1, open(file+'.bak', encoding='utf-8', mode='w') as f2:
# 3.将原文件的内容读出来修改成新内容,写入新文件
for line in f1: # 第一次循环第一行
new_line = line.replace('不要', 'ss') # 修改内容
f2.write(new_line)
# 4.将原文件删除
os.remove(file)
# 5.将新文件重命名成原文件
os.rename(file+'.bak', file)
总结
以上就是文章要表达的内容,本文简单介绍了Python函数嵌套、递归、os模块文件处理的概念以及应用。