高阶函数的代码实现

236_了解高阶函数

高阶函数:把函数作为参数传入,这样的函数称为高阶函数,高阶函数是函数式编程的体现。函数式编程就是指这种高度抽象的编程范式。

237_abs和round函数的应用

4.1 体验高阶函数
在python中,abs()函数可以完成对数字求绝对值计算。

abs(-10)   #10

round()函数可以完成对数字的四舍五入计算。

round(1.2)   #1
round(1.9)    #2

abs()和round()函数的应用,代码实现如下所示:

#abs():绝对值
print(abs(-10))

#round():四舍五入
print(round(1.2))
print(round(1.9))

abs()和round()函数的应用
运行结果:

运行结果

238_体验高阶函数的思路分析

需求:任意两个数字,按照指定要求整理数字后再进行求和计算。

  • 方法1
def add_num(a,b):
	return abs(a) + abs(b)

result = add_num(-1,2)
print(result)   # 3
  • 方法2
def sum_num(a,b,f):
	return f(a) + f(b)

result = sum_num(-1,2,abs)
print(result)  # 3

注意:两种方法对比之后,发现方法2的代码会更加简洁,函数灵活性更高。
函数式编程大量使用函数,减少了代码的重复,因此程序比较短,开发速度较快。

239_体验高阶函数的代码实现

#需求:任意两个数字,先进行数字处理(绝对值或四舍五入),然后再求和计算
#1.写法
def add_num(a,b):
    #绝对值
    return abs(a) + abs(b)

result = add_num(-1.1,1.9)
print(result)

#2.写法二:高阶函数:f是第三个参数,用来接收将来传入的函数
def sum_num(a,b,f):
    return f(a) + f(b)

result1 = sum_num(-1,5,abs)
print(result1)

result2 = sum_num(1.1,1.3,round)
print(result2)

体验高阶函数的代码实现

240_内置高阶函数之map

4.2 内置高阶函数
4.2.1 map()
map(func,lst),将传入的函数变量func作用到lst变量的每个元素中,并将结果组成新的列表(Python2)/迭代器(Python3)返回。
需求:计算list1序列中各个数字的2次方。

list1 = [1,2,3,4,5]

def func(x):
	return x **2

result = map(func,list1)

print(result)  
print(list(result))

内置高阶函数之map(),代码实现如下所示:

#1.准备列表数据
list1 = [1,2,3,4,5]

#2.准备2次方计算的函数
def func(x):
	return x **2

#3.调用map
result = map(func,list1)

#4.验收成果
print(result)
print(list(result))

内置高阶函数之map()
运行结果:
运行结果

241_内置高阶函数之reduce

4.2.2 reduce()
reduce(func,lst),其中func必须有两个参数,每次func计算的结果继续和序列的下一个元素做累积计算。
注意:reduce()传入的参数func必须接收2个参数。
需求:计算list1序列中各个数字的累加和。

import functools
list1 = [1,2,3,4,5]

def func(a,b):
	return a + b

result = functools.reduce(func,list1)

print(result)  # 15 

内置高阶函数之reduce,实现代码如下所示:

list1 = [1,2,3,4,5]

#1.导入模块
import functools

#2.定义功能函数
def func(a,b):
    return a + b

#3.调用reduce作用:功能函数计算的结果和序列的下一个数据做累计计算
result = functools.reduce(func,list1)
print(result)

内置高阶函数之reduce
运行结果:
运行结果

242_内置高阶函数之filter

4.2.3 filter()
filter(func,lst)函数用于过滤序列,过滤掉不符合条件的元素,返回一个filter对象。如果要转换为列表,可以使用list()来转换。

list1 = [1,2,3,4,5,6,7,8,9,10]

def func(x):
	return x % 2 ==0

result = filter(func,list1)

print(result)
print(list(result))

内置高阶函数之filter,代码实现情况如下所示:

list1 = [1,2,3,4,5,6,7,8,9,10]

#1.定义功能函数:过滤序列中的偶数
def func(x):
	return x % 2 ==0

#2.调用filter
result = filter(func,list1)

print(result)
print(list(result))

内置高阶函数之filter
运行结果:
运行结果

247_读取函数之read

2.1.2.2 读

  • read()
文件对象.read(num)

num表示要从文件中读取的数据的长度(单位是字节),如果没有传入num,那么就表示读取文件中所有的数据。

f = open('1.txt','r')

#文件内容如果换行,底层有\n,会有一个字节占位,导致read书写参数读取出来的和眼睛看到的个数参数不匹配
#read不写参数表示读取所有;
#print(f.read())
print(f.read(10))
f.close()

读取函数之read
运行结果:
运行结果

248_读取函数之readlines

readlines()
readlines可以按照行的方式把整个文件中的内容进行一次性读取,并且返回的是一个列表,其中每一行的数据为一个元素。

f = open('test.txt')
content = f.readlines()

print(content)

#关闭文件
f.close()

读取函数之readlines,代码实现如下所示:

f = open('1.txt','r')

con = f.readlines()
print(con)

f.close()

读取函数之readlines
运行结果:
运行结果
运行结果

249_读取函数之readline

readline()
readline()一次读取一行内容。

f = open('test.txt')

content = f.readline()
print(f'第一行:{content}')

content = f.readline()
print(f'第二行:{content}')

#关闭文件
f.close()

读取函数之readline,代码实现如下所示:

f = open('1.txt','r')

con = f.readline()
print(con)

con = f.readline()
print(con)

con = f.readline()
print(con)

f.close()

读取函数之readline
运行结果:
运行结果

251_访问模式特点02之代码测试

"""
测试目标
1.r+  和   w+  a+区别;
2.文件指针对数据读取的影响
"""
#r+:r没有该文件则报错:文件指针在开头,所以能读取出来数据
#f = open('1.txt','r+')
#f = open('100.txt','r+')

#a+:没有该文件会新建文件;文件指针在结尾,无法读取数据(文件指针后面没有数据)
#f = open('1.txt','a+')
f = open('100.txt','a+')

con = f.read()
print(con)

f.close()

访问模式特点之代码测试

252_seek函数

2.1.2.3 seek()
作用:用来移动文件指针。
语法如下:

文件对象.seek(偏移量,起始位置)

起始位置:

  • 0:文件开头
  • 1:当前位置
  • 2:文件结尾
"""
语法:文件对象.seek(偏移量,起始位置)  0:开头   1:当前位置    2:结尾
目标:
    1.r 改变文件指针位置:改变读取数据开始位置或把文件指针放结尾(无法读取数据)
    2.a  改变文件指针位置,做到可以读取出来数据
"""
f = open('1.txt','r+')

f.seek(2,0)
con = f.read()
print(con)

f.close()

seek()函数改变文件指针位置
运行结果:
运行结果
a+访问模式读取数据,文件指针在结尾,无法读取数据,情况显示如下所示:

"""
语法:文件对象.seek(偏移量,起始位置)  0:开头   1:当前位置    2:结尾
目标:
    1.r 改变文件指针位置:改变读取数据开始位置或把文件指针放结尾(无法读取数据)
    2.a  改变文件指针位置,做到可以读取出来数据
"""
#f = open('1.txt','r+')

#1.改变读取数据开始位置
#f.seek(2,0)
#1.把文件指针放结尾(无法读取数据)
#f.seek(0,2)

f = open('1.txt','a+')

con = f.read()
print(con)

f.close()

a+访问模式读取数据
运行结果:
运行结果
a+访问模式,利用seek()函数读取数据,情况显示如下所示:

"""
语法:文件对象.seek(偏移量,起始位置)  0:开头   1:当前位置    2:结尾
目标:
    1.r 改变文件指针位置:改变读取数据开始位置或把文件指针放结尾(无法读取数据)
    2.a  改变文件指针位置,做到可以读取出来数据
"""
#f = open('1.txt','r+')

#1.改变读取数据开始位置
#f.seek(2,0)
#1.把文件指针放结尾(无法读取数据)
#f.seek(0,2)

#2.a  改变文件指针位置,做到可以读取出来数据
f = open('1.txt','a+')

#f.seek(0,0)
f.seek(0)

con = f.read()
print(con)

f.close()

a+访问模式,利用seek()函数读取数据
运行结果:
运行结果

253_文件备份的作用

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为XX[备份]后缀,例如:test[备份].txt)。

254_文件备份思路分析

需求:用户输入当前目录下任意文件名,程序完成对该文件的备份功能(备份文件名为XX[备份]后缀,例如:test[备份].txt)。
3.1 步骤
1.接收用户输入的文件名
2.规划备份文件名
3.备份文件写入数据

255_文件备份之接收用户输入

3.2 代码实现
1.接收用户输入目标文件名

old_name = input('请输入您要备份的文件名:') 

2.规划备份文件名
2.1 提取目标文件名后缀
2.2 组织备份的文件名,xx[备份]后缀

#1.用户输入目标文件
old_name = input('请输入您要备份的文件名:')
print(old_name)
print(type(old_name))
#2.规划备份文件的名字
#3.备份文件写入数据(数据和原文件一样)

文件备份之接收用户输入
运行结果:
运行结果

256_文件备份之规划文件名

2.规划备份文件名
2.1 提取目标文件名后缀
2.2 组织备份的文件名,xx[备份]后缀

#2.1 提取文件后缀点的下标
index = old_name.rfind('.')

#print(index)  #后缀中 . 的下标

#print(old_name[:index])  #源文件名(无后缀)

#2.2 组织新文件名  旧文件名 + [备份] +后缀
new_name = old_name[:index] + '[备份]' + old_name[index:]

#打印文件名(带后缀)
#print(new_name)
#1.用户输入目标文件
old_name = input('请输入您要备份的文件名:')
print(old_name)
print(type(old_name))
#2.规划备份文件的名字
#2.1 提取后缀 -- 找到名字中的点  -- 最右侧的点才是后缀的点 -- 字符串查找某个子串rfind
index = old_name.rfind('.')
#print(index)

#2.2 组织新名字 = 原名字+ [备份]+ 后缀
#原名字就是字符串中的一部分子串 -- 切片[开始:结束:步长]
print(old_name[:index])
print(old_name[index:])
new_name = old_name[:index]+ '[备份]'+ old_name[index:]
print(new_name)
#3.备份文件写入数据(数据和原文件一样)

文件备份之规划文件名
运行结果:
运行结果

257_文件备份之数据写入

3.备份文件写入数据
3.1 打开源文件 和 备份文件
3.2 将源文件数据写入备份文件
3.3 关闭文件

#3.1 打开文件
old_f = open(old_name,'rb')
new_f = open(new_name,'wb')

#3.2 将源文件数据写入备份文件
while True:
	con = old_f.read(1024)
	if len(con) == 0:
		break

备份文件并写入数据,代码实现如下所示:

#1.用户输入目标文件
old_name = input('请输入您要备份的文件名:')
print(old_name)
print(type(old_name))
#2.规划备份文件的名字
#2.1 提取后缀 -- 找到名字中的点  -- 最右侧的点才是后缀的点 -- 字符串查找某个子串rfind
index = old_name.rfind('.')
#print(index)

#2.2 组织新名字 = 原名字+ [备份]+ 后缀
#原名字就是字符串中的一部分子串 -- 切片[开始:结束:步长]
print(old_name[:index])
print(old_name[index:])
new_name = old_name[:index]+ '[备份]'+ old_name[index:]
print(new_name)

#3.备份文件写入数据(数据和原文件一样)
#3.1 打开源文件  和  备份文件
old_f = open(old_name,'rb')
new_f = open(new_name,'wb')

#3.2 源文件读取,备份文件写入
#如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了就终止循环
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        #表示读取完成了
        break

    new_f.write(con)

#3.3 关闭文件
old_f.close()
new_f.close()

文件备份之数据写入
运行结果:
运行结果1
运行结果2

258_文件备份之限制有效文件名备份

思考:如果用户输入.txt,这是一个无效文件,程序如何更改才能限制只有有效的文件名才能备份?
答:添加条件判断即可。

#1.用户输入目标文件
old_name = input('请输入您要备份的文件名:')
print(old_name)
print(type(old_name))
#2.规划备份文件的名字
#2.1 提取后缀 -- 找到名字中的点  -- 最右侧的点才是后缀的点 -- 字符串查找某个子串rfind
index = old_name.rfind('.')
#print(index)

#4.思考:有效文件才备份.txt
if index > 0:
    #提取后缀
    postfix = old_name[index:]

#2.2 组织新名字 = 原名字+ [备份]+ 后缀
#原名字就是字符串中的一部分子串 -- 切片[开始:结束:步长]
print(old_name[:index])
print(old_name[index:])
#new_name = old_name[:index]+ '[备份]'+ old_name[index:]
new_name = old_name[:index]+ '[备份]'+ postfix
print(new_name)

#3.备份文件写入数据(数据和原文件一样)
#3.1 打开源文件  和  备份文件
old_f = open(old_name,'rb')
new_f = open(new_name,'wb')

#3.2 源文件读取,备份文件写入
#如果不确定目标文件大小,循环读取写入,当读取出来的数据没有了就终止循环
while True:
    con = old_f.read(1024)
    if len(con) == 0:
        #表示读取完成了
        break

    new_f.write(con)

#3.3 关闭文件
old_f.close()
new_f.close()

文件备份之限制有效文件名备份
运行结果:
运行结果1
运行结果2

259_文件操作函数

四、文件和文件夹的操作
在python中,文件和文件夹的操作要借助os模块里面的相关功能,具体步骤如下:
1.导入os模块

import os

2.使用os模块相关功能

os.函数名

4.1 文件重命名

os.rename(目标文件名,新文件名)

4.2 删除文件

os.remove(目标文件名)

借助os模块里面的相关功能处理文件命名和删除操作,代码实现如下:

"""
1.导入模块os
2.使用模块内功能
"""
import os

#1.rename():重命名
# os.rename('1.txt','10.txt')

#2.remove():删除文件
os.remove('10.txt')

借助os模块里面的相关功能处理文件命名和删除操作
运行结果:
已经删除的10.txt问价无法重复删除

260_文件夹操作函数之创建和删除

4.3 创建文件夹

os.mkdir(文件夹名字)

创建文件夹,代码实现如下所示:

"""
1.导入模块os
2.使用模块内功能
"""
import os

#1.rename():重命名
# os.rename('1.txt','10.txt')

#2.remove():删除文件
#os.remove('10.txt')

#3.mkdir():创建文件夹
os.mkdir('aa')

创建文件夹
运行结果:
运行结果1
运行结果2
4.4 删除文件夹

os.rmdir(文件夹名字)

删除文件夹,代码实现如下所示:

#4.rmdir():删除文件夹
os.rmdir('aa')

删除文件夹

261_文件夹操作函数之路径相关函数

4.5 获取当前目录

os.getcwd()

利用getcwd()函数,返回文件所在路径,代码实现如下所示:

#5.getcwd():返回当前文件所在目录路径
print(os.getcwd())

利用getcwd()函数,返回文件所在路径
运行结果:
运行结果
4.6 改变默认目录

os.chdir(目录)

改变默认目录,并在指定目录里创建新的文件夹,代码实现如下所示:

#6.chdir():改变目录路径
#os.mkdir('aa')
#需求:在aa里面创建bb文件夹:1.切换目录到aa.   2.创建bb
#os.mkdir('bb')

os.chdir('aa')
os.mkdir('bb')

改变默认目录,并在指定目录里创建新的文件夹
运行结果:
运行结果1
运行结果2
4.7 获取目录列表

os.listdir(目录)

获取当前所在Py文件夹下的所有文件,并返回一个列表,代码实现如下所示:

#7.listdir():获取某个文件夹下所有文件,返回一个列表
print(os.listdir())
print(os.listdir('aa'))

获取当前所在Py文件夹下的所有文件,并返回一个列表
运行结果:
运行结果

262_文件夹操作函数之rename

4.1 文件重命名

os.renmae(目标文件名,新文件名)

文件重命名,代码实现如下所示:

#8.rename() -- 重命名文件夹  bb重命名为bbbb
os.rename('bb','bbbb')

文件重命名
运行结果:
运行结果

263_批量重命名之添加字符串

五、应用案例额
需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串。
步骤:
1.设置添加删除字符串的标识
2.获取指定目录的所有文件
3.将原有文件名添加、删除指定字符串,构造新名字
4.os.rename()重命名

#需求1:把code文件夹下所有文件重命名为python  xxxxx
import os

#1.找到所有文件:获取code文件夹的目录列表 -- Llistdir()
file_list = os.listdir()
print(file_list)

#2.构造名字
for i in file_list:
    #new_list = 'CaiLirong_' + '源文件名'
    #new_name = 'python_' + i
    new_name = 'CaiLirong_' + i
#3.重命名
    os.rename(i,new_name)

批量命名之添加字符串
运行结果:
运行结果

264_批量重命名之添加和删除字符串

需求:批量修改文件名,既可添加指定字符串,又能删除指定字符串。

#需求1:把code文件夹下所有文件重命名为python  xxxxx
#需求2:删除CaiLirong_python_  重命名:1.构造条件的数据  2.书写if
import os

#构造条件的数据
flag == 2

#1.找到所有文件:获取code文件夹的目录列表 -- Llistdir()
file_list = os.listdir()
print(file_list)

#2.构造名字
for i in file_list:
    if flag == 1:
        #new_list = 'CaiLirong_' + '源文件名'
        #new_name = 'python_' + i
        new_name = 'CaiLirong_' + i

    elif flag == 2:
        #删除前缀
        num = len('CaiLirong_python_')
        new_name = i[num:]
#3.重命名
    os.rename(i,new_name)

批量修改文件名,既可添加指定字符串,又能删除指定字符串
运行结果:

运行结果

265_文件总结

六、总结

  • 文件操作步骤
    • 打开
文件对象 = open(目标文件,访问模式)
  • 操作

文件对象.read()
文件对象.readlines()
文件对象.readline()

文件对象.write
  • seek()
  • 关闭
文件对象.close()
  • 主访问模式
    1.w:写,文件不存在则新建该文件
    2.r:读,文件不存在则报错
    3.a:追加
  • 文件和文件夹操作
    1.重命名:os.rename()
    2.获取当前目录:os.getcwd()
    3.获取目录列表:os.listdir()
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

陌上花开,静待绽放!

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值