Python学习笔记(六):函数的多返回值、函数的多种参数使用形式、匿名函数、文件的读取操作、文件的写入 、文件的追加

目录

一、函数的多返回值

二、函数的多种参数使用形式

2.1位置参数

2.2关键字参数

2.3缺省参数

2.4不定长参数

三、匿名函数

3.1 函数作为参数传递

3.2 函数的定义

3.3 匿名函数定义语法:

四、文件的读取操作

4.1 open()打开函数

4.2 read()方法:

4.3 readlines()方法:

4.4 readline()方法:一次读取一行内容

4.5 for循环读取文件行

4.6 close() 关闭文件对象

4.7 with open 语法

五、文件的写入 

六、文件的追加


一、函数的多返回值

#演示使用多个变量,接收多个返回值

deftest_return():

return1,"hello",True

x,y,z=test_return()

print(x)

print(y)

print(z)

结果为

1

hello

True

通过return返回多个值,用逗号隔开,可以用多个变量去接受他

注意对位,第一个变量接收第一个值,第二个变量接收第二个值。

二、函数的多种参数使用形式

2.1位置参数

位置参数:调用函数时根据函数定义的参数位置来传递参数

defuser_info(name,age,gender):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('TOM',20,'男')

注意:传递的参数和定义的参数的顺序及个数必须一致

2.2关键字参数

关键字参数:函数调用时通过“键=值”形式传递参数.

作用: 可以让函数更加清晰、容易使用,同时也清除了参数的顺序需求.

defuser_info(name,age,gender):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
#关键字传参
user_info(name='TOM',age=20,gender='男')
#可以不按照固定顺序
user_info(age=20,gender='男',name='TOM')
#可以和位置参数混合使用,位置参数必须在前面,且匹配参数顺序
user_info('TOM',age=20,gender='男')

注意:

       函数调用时,如果有位置参数时,位置参数必须在关键字参数的前面,但关键字参数之间不存在先后顺序

2.3缺省参数

缺省参数:缺省参数也叫默认参数,用于定义函数,为参数提供默认值,调用函数时可不传该默认参数的值(注意:所有位置参数必须出现在默认参数前,包括函数定义和调用)

作用: 当调用函数时没有传递参数, 就会使用默认是用缺省参数对应的值.

注意:

       函数调用时,如果为缺省参数传值则修改默认参数值, 否则使用这个默认值,设置默认值统一放在最后面

defuser_info(name,age,gender='男'):
print(f'您的名字是{name},年龄是{age},性别是{gender}')
user_info('小明',34)
user_info('小明',34,'女')

2.4不定长参数

不定长参数:不定长参数也叫可变参数. 用于不确定调用的时候会传递多少个参数(不传参也可以)的场景.

作用: 当调用函数时不确定参数个数时, 可以使用不定长参数

2.4.1位置传递

defuser_info(*args):
print(args)

#('TOM')
user_info('TOM')
#('TOM',18)
user_info('TOM',18)

注意:

      传进的所有参数都会被args变量收集,它会根据传进参数的位置合并为一个元组(tuple),args是元组类型,这就是位置传递

2.4.2关键字传递

defuser_info(**kwargs):
print(kwargs)

#{'name':'TOM','age':18,'id':110}
user_info(name='TOM',age=18,id=110)

注意:

      参数是“键=值”形式的形式的情况下, 所有的“键=值”都会被kwargs接受, 同时会根据“键=值”组成字典.

三、匿名函数

3.1 函数作为参数传递

函数compute,作为参数,传入了test_func函数中使用。

test_func需要一个函数作为参数传入,这个函数需要接收2个数字进行计算,计算逻辑由这个被传入函数决定

compute函数接收2个数字对其进行计算,compute函数作为参数,传递给了test_func函数使用

最终,在test_func函数内部,由传入的compute函数,完成了对数字的计算操作

所以,这是一种,计算逻辑的传递,而非数据的传递。

就像上述代码那样,不仅仅是相加,相见、相除、等任何逻辑都可以自行定义并作为函数传入。

总结:

1. 函数本身是可以作为参数,传入另一个函数中进行使用的。

2. 将函数传入的作用在于:传入计算逻辑,而非传入数据。

3.2lambda匿名函数

3.2 函数的定义

def关键字,可以定义带有名称的函数

lambda关键字,可以定义匿名函数(无名称)

有名称的函数,可以基于名称重复使用。

无名称的匿名函数,只可临时使用一次

3.3 匿名函数定义语法:

lambda 传入参数:函数体(一行代码)

lambda 是关键字,表示定义匿名函数

传入参数表示匿名函数的形式参数,如:x, y 表示接收2个形式参数

函数体,就是函数的执行逻辑,要注意:只能写一行,无法写多行代码

通过def关键字,定义一个函数,并传入。

deftest_func(compute):
result=compute(11,12)
print(result)

defcompute(x,y):
returnx+y

test_func(compute)  #结果:23

也可以通过lambda关键字,传入一个一次性使用的lambda匿名函数

deftest_func(compute):
result=compute(11,13)
print(result)

test_func(lambdax,y:x+y)   #结果:24

使用def和使用lambda,定义的函数功能完全一致,只是lambda关键字定义的函数是匿名的,无法二次使用

四、文件的读取操作

4.1 open()打开函数

在Python,使用open函数,可以打开一个已经存在的文件,或者创建一个新文件,语法如下

open(name,mode,encoding)

name:是要打开的目标文件名的字符串(可以包含文件所在的具体路径)。

mode:设置打开文件的模式(访问模式):只读、写入、追加等。

encoding:编码格式(推荐使用UTF-8)

mode常用的三种基础访问模式

4.2 read()方法:

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

4.3 readlines()方法:

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

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

#['helloworld\n','abcdefg\n','aaa\n','bbb\n','ccc']
print(content)

#关闭文件
f.close()

4.4 readline()方法:一次读取一行内容

f=open('python.txt')

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

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

#关闭文件
f.close()

4.5 for循环读取文件行

forlineinopen("python.txt","r"):
print(line)

#每一个line临时变量,就记录了文件的一行数据

4.6 close() 关闭文件对象

f=open("python.txt","r")

f.close()

#最后通过close,关闭文件对象,也就是关闭对文件的占用
#如果不调用close,同时程序没有停止运行,那么这个文件将一直被Python程序占用。

4.7 with open 语法

withopen("python.txt","r")asf:
f.readlines()

#通过在withopen的语句块中对文件进行操作
#可以在操作完成后自动关闭close文件,避免遗忘掉close方法

操作汇总 

练习:

通过Windows的文本编辑器软件,将如下内容,复制并保存到:word.txt,文件可以存储在任意位置

itheima itcast python

itheima python itcast

beijing shanghai itheima

shenzhen guangzhou itheima

wuhan hangzhou itheima

zhengzhou bigdata itheima

通过文件读取操作,读取此文件,统计itheima单词出现的次数

#打开文件,以读取模式打开
f=open("D:/word.txt","r",encoding="UTF-8")
#方法1:读取全部内容,通过字符串count方法统计itheima单词数量
content=f.read()
count=content.count("itheima")
print(f"itheima在文件中出现了:{count}次")

#方法2:读取内容,一行一行读取
#判断单词出现次数并积累
count=0#使用count变量来累计itheima出现的次数
forlineinf:
line=line.strip()#通过strip去除开头和结尾的空格以及换行符
words=line.split("")
forwordinwords:
ifword=="itheima":
count+=1#如果单词是itheima,进行数量的累加加1
print(f"itheima在文件中出现了:{count}次")

#关闭文件
f.close()

五、文件的写入 

#1.打开文件
f=open('python.txt','w')

#2.文件写入
f.write('helloworld')    #写入内存

#3.内容刷新
f.flush()           #将内存中积攒的内容,写入到硬盘的文件中

注意:

直接调用write,内容并未真正写入文件,而是会积攒在程序的内存中,称之为缓冲区

当调用flush的时候,内容会真正写入文件

这样做是避免频繁的操作硬盘,导致效率下降(攒一堆,一次性写磁盘)

写操作注意:

文件如果不存在,使用”w”模式,会创建新文件

文件如果存在,使用”w”模式,会将原有内容清空

close方法,内置了flush的功能

六、文件的追加

#1.打开文件,通过a模式打开即可,写法和前面一样
f=open('python.txt','a')

#2.文件写入
f.write('helloworld')  #写入内存

#3.内容刷新
f.flush()     #将内存中积攒的内容,写入到硬盘的文件中

注意:

a模式,文件不存在会创建文件

a模式,文件存在会在最后,追加写入文件

可以使用”\n”来写出换行符

练习:

需求:有一份账单文件,记录了消费收入的具体记录,内容如下:

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,消费,正式

可以将先内容复制并保存为 bill.txt文件

我们现在要做的就是:

读取文件

将文件写出到bill.txt.bak文件作为备份

同时,将文件内标记为测试的数据行丢弃

实现思路:

open和r模式打开一个文件对象,并读取文件

open和w模式打开另一个文件对象,用于文件写出

for循环内容,判断是否是测试不是测试就write写出,是测试就continue跳过

将2个文件对象均close()


#打开文件并得到文件对象:准备读取
fr=open("D:/zzz.txt","r",encoding="UTF-8")
#打开文件得到文件对象,准备写入
fw=open("D:/zzz.txt.bak","w",encoding="UTF-8")
#for循环读取文件
forlineinfr:
line=line.strip()#通过strip()开头和结尾的空格以及回车换行符去掉
#判断内容,将满足的内容写出
ifline.split(",")[4]=="测试":
continue#continue进入下一次循环,这一次后面的内容就跳过了
#将内容写出去
fw.write(line)
#由于前面对内容进行了strip()的操作,所以要手动的写出换行符
fw.write("\n")

#close2个文件对象
fr.close()
fw.close()#写出文件调用close()会自动flush()

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/260249.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

2023 英特尔On技术创新大会直播 |我感受到的“芯”魅力

文章目录 每日一句正能量前言AI时代,云与PC结合为用户带来更好体验全新处理器,首次引入针对人工智能加速的NPU大模型时代,软硬结合带来更好训练成果后记 每日一句正能量 成长是一条必走的路路上我们伤痛在所难免。 前言 在2023年的英特尔On技…

【UML】第8篇 用例图(3/3)

目录 一、用例的关系 1.1 泛化(Generalization)关系 1.2 包含(include)关系 1.3 扩展关系 二、用例表示例 不是非要把电影改成连续剧,给大家播,确实是时间和精力有限。 用例图,虽然简单&…

一个网卡能设置(绑定)两个或多个IP

昨天领导问我,一个网卡设置两个IP。我就有点发愣:一个网卡能设置两个IP吗?我倒是见过一个机器插两个网卡,同时支持内网和外网。一个网卡设置两个IP,以谁为准? 上网搜索了一下,还真可以&#xff…

MySQL——基础篇

学习视频链接:https://www.bilibili.com/video/BV1Kr4y1i7ru/?spm_id_from333.999.0.0&vd_source619f8ed6df662d99db4b3673d1d3ddcb 前言✴️ 基础篇——MySQL概述、SQL、函数、约束、多表查询、事务 进阶篇——存储引擎、索引、SQL优化、视图/存储过程/触发…

Spring Boot3通过GraalVM生成exe执行文件

一、安装GraalVM 1、官网:https://www.graalvm.org/downloads/ 2、配置环境变量 2.1、环境变量必须使用JAVA_HOME,否则会出现问题 2.2、在系统变量配置Path,%JAVA_HOME%\bin,注意必须放在顶部第一位 2.3、配置jdk的环境变量,在P…

vue的语法模板与数据绑定的说明

vue的两大模板语法: 1.插值语法 2.指定语法 插值语法:{{}} 功能:用于解析标签体的内容 写法:{{xxx}},xxx是js表达式,且可以直接读取到data中的所有属性 指定语法: 功能:用于解析标签(包括:标签属性、标…

判断数据是否为整数--函数设计与实现

#定义函数:is_num(s),判断输入的数据是否整数。 #(1)判断是否是数字 def is_num(s):if s.isdigit(): #isdigit()是一个字符串方法,用于检查字符串是否只包含数字字符。如果字符串只包含数字字符,则返回True;否则返回Falsereturn T…

订货系统本地化部署的三大优势

批发贸易行业,订货系统的本地化部署成为了许多企业的首选。本地化部署意味着将订货系统部署在企业自己的服务器上,而不是依赖于云服务提供商。这种部署方式有许多优势,以下是其中的四个主要优势: 1. 数据安全性:本地化…

Redis第2讲——Java三种客户端(Jedis、Lettuce和Redisson)

上篇文章介绍了Redis的9种数据类型和常命令、7种数据结构和9种编码方式。但是如果想要把它应用到项目中,我们还需要一个redis的客户端。redis的Java客户端种类还是很多的,其中使用最广泛的有三种——Jedis、lettuce和redisson,下面我们一起来…

基于Redis限流(aop切面+redis实现“令牌桶算法”)

令牌桶算法属于流量控制算法,在一定时间内保证一个键(key)的访问量不超过某个阈值。这里的关键是设置一个令牌桶,在某个时间段内生成一定数量的令牌,然后每次访问时从桶中获取令牌,如果桶中没有令牌&#x…

I.MX6ULL启动详解:Boot配置、Bootable image启动头的组成

本篇文章来了解一下I.MX6ULL的启动方式,实际上之前我介绍了NXP的跨界MCU RT1170的启动方式:I.MX RT1170启动详解:Boot配置、Bootable image头的组成,两个芯片虽然一个是Cortex-M,一个是Cortex-A,但是都是来…

猫罐头评测:五大平价猫罐头排行榜揭晓!

想必铲屎官都知道给猫咪长期吃主食罐头的好处了吧!主食罐头不仅营养丰富,还能让猫咪顺便补充水分。有时候猫咪食欲不佳,一罐主食罐头就能让它们胃口大开呢。 通过本文,我将与大家分享我做宠物医生6年间发现的一些好用的猫罐头&…

AcWing算法提高课-2.1.3山峰和山谷

算法提高课整理 CSDN个人主页:更好的阅读体验 原题链接 题目描述 FGD 小朋友特别喜欢爬山,在爬山的时候他就在研究山峰和山谷。 为了能够对旅程有一个安排,他想知道山峰和山谷的数量。 给定一个地图,为 FGD 想要旅行的区域&a…

20231218在微软官网下载WINDOWS10以及通过rufus-4.3p写入U盘作为安装盘

20231218在微软官网下载WINDOWS10以及通过rufus-4.3p写入U盘作为安装盘 2023/12/18 17:06 百度搜索:下载 windows10 https://www.microsoft.com/zh-cn/software-download/windows10 下载 Windows 10 更新之前,请参阅 Windows 版本信息状态中的已知问题&a…

图神经网络并在 TensorFlow 中实现

asokraju.medium.com 一、说明 本文将引导您了解图神经网络 (GNN) 并使用 TensorFlow 实现该网络。在后续的 文章中,我们讨论 GNN 的不同变体及其实现。这是一个分步计划: 图神经网络 (GNN) 的使用:我们首先讨论 GNN 是什么、它们如何工作以及…

3-10岁孩子语文能力培养里程碑

文章目录 基础能力3岁4岁5岁6-7岁(1-2年级)8-9岁(3-4年级)10岁(5年级) 阅读推荐&父母执行3岁4-5岁6-7岁(1-2年级)8-9岁(3-4年级)10岁(5年级&a…

1 pandas与NumPy比较

NumPy NumPy是用python进行科学计算的一个基础库,因为它提供python基础包没有提供的数据结构和高性能函数。NumPy定义了一种专门用于科学计算的数据结构ndarray - 它是一种N纬数组。特点如下: 内存块风格 由于ndarray中的所有元素都是相同的&#xff0…

awk 命令详解

1. 编写 awk 脚本基础 1.1 Hello,World 通过演示“Hello,World”这个程序来介绍一种程序设计语言。通过演示这个程序在 awk 中如何工作将证明 awk 是如何的不寻常。实际上,有必要演示几种打印“Hello,World”的不同方法。 在第…

llvm后端之DAG设计

llvm后端之DAG设计 引言1 核心类设计2 类型系统2.1 MVT::SimpleValueType2.2 MVT2.3 EVT 3 节点类型 引言 llvm后端将中端的IR转为有向无环图,即DAG。如下图: 图中黑色箭头为数据依赖;蓝色线和红色线为控制依赖。蓝色表示指令序列化时两个节…

车载V2X方案的选型分享

ACX200T面向 5G车联网C-V2X 应用的安全芯片,满足V2X场景下消息认证的专用安全芯片,该款芯片采用公司自主的 高速硬件加密引擎 ,支 持国家标准SM1、SM2、SM3、SM4密码算法,同时支持国际ECDSA、AES、SHA-1密码算法。可实现网联汽车云…