Python学习 day09
一、文件的修改
python中修改文件,可以直接通过write实现,但这种方法均比较局限。若有需求:将文件中的某内容替换为新内容,其他内容保持不变。这种需求write理论上是可以实现的,可以将一个文件的内容读出修改后再写入,但若是原文件内容过大,则可能有内存溢出的风险,又或是程序执行过程中中断,可能造成文件内容丢失。
若想实现文件某内容的修改,结合我们读取文件最好的方法for循环读取,是最安全科学的修改文件手段。
因此,这里还是要说明,修改表面上看是我们将文件内容中某部分内容修改了,但实际上实现这样的结果并不一定要通过修改来实现,写程序时应牢记表面的展现与实现的内里并不一定相同。
文件修改的常用方法:
1、创建一个空文件
2、将原文件内容逐行读取,若遇到修改内容进行修改,然后逐行写入创建的空文件
3、删除原文件
4、将创建的新文件文件名修改为原文件名
原文件内容:
代码:
import os # 将‘阴’替换为‘晴’
with open('日志', 'r', encoding='utf-8') as f1, open('日志.bak', 'w', encoding='utf-8') as f2:
for line in f1:
if '阴' in line:
line = line.replace('阴', '晴')
f2.write(line)
# 删除原文件,重命名新文件
os.remove('日志')
os.rename('日志.bak', '日志')
结果:
二、函数
函数,即方法,主流语言应该都有的,将一段实现某功能的代码封装在一起形成一个函数,需要使用该代码时,只需调用函数即可。
python中函数的定义方法:
def 函数名(参数): #参数可写可不写
函数体
return 返回值 #可写可不写
注意:python中的函数与java等编译型语言不同的地方,函数必须在调用前声明,python解释器始终是从上到下工作的,若函数声明在调用后面,则调用自然会报错。
三、返回值
返回值基本同其他语言一样,但有一点不同,python可以直接返回多个值。分如下3种情况:
1、没有返回值 —— python种默认返回None
不写return
只写return
return None —— 多此一举
2、返回一个值
可以返回任何数据类型
只要返回就可以接收到
如果在一个程序中有多个return,那么执行程序运行过程中遇到的第一个
3、返回多个值
用多个变量接收 —— 有多少返回值就用多少变量接收
用一个变量接收 —— 得到的是一个元祖
ps:python可以返回多个值也是得益于其自带的解包机制,如a, b = [1, 2],python解释器会自动将[1, 2]解包并分别赋值给a, b两个变量,包括tuple、dict、set都是可以解包的。其实这真是很容易让人理解和接收的一种特性,却是目前自己所知的语言里独有的,python真的对代码做了很多优化。
四、参数
- 形参(以下是按实际函数定义时参数顺序介绍)
1、位置参数 —— 直接定义参数,必须传
def func(a)
a即位置参数
2、*args —— 可以接收任意多个未知参数,接受的是按照位置传参的值,组成一个元祖,动态参数
def func(*args): # 习惯用args作为参数名
print(args)
func(1, 2, 3)
结果:
可看到,传入的参数被封装为一个元祖,python有解包自然有封包
对于列表,如果想将其每个元素作为参数传给动态参数,可以这么传:
li = [1, 2, 3]
func(*li)
set、tuple、dict(但dict只能得到键)同理
3、默认参数 —— 可不传,如果不传就使用默认的参数
def func(a=1)
默认参数一般用于我们调用函数时,某个变量大部分情况都可能传递一个相同的值,只有少数情况会传递其他值,使用默认参数就可以在传参时少传一个参数了。
4、**kargs —— 可以接收多个按关键字传参的值,组成一个字典,动态参数
def func(**kwargs): # 习惯用kwargs作为参数名
print(kwargs) func(k1='v1', k2='v2', k3='v3')
按关键字传参极类似dict的键值对,所以对于dict,想将其键值对分开一一作为参数传入,可以如下传参:
dic = {'k1': 'v1', 'k2': 'v2', 'k3': 'v3'}
func(**dic)
- 实参
1、按照位置传参:直接写参数值
2、按照关键字传参:关键字 = 值
3、可以混用,但是,必须先按照位置传参,再按照关键字传参
4、不管用哪种传参方式,都必须保证一一对应,每个变量都有且仅有一个值
注意:形参的定义方式和实参的传参方式并没有直接联系,形参不论定义的是位置参数还是默认参数,实参都可以选择按位置传参或按关键字传参。
函数的注释
def func(name, *args, sex='女', **kwargs):
"""
这是函数注释,此处写明函数功能,下方是参数及返回值说明
:param name: 姓名
:param args: 所有爱好
:param sex: 性别,默认女
:param kwargs: 其他信息
:return: 无返回值
"""
print('姓名:%s,性别:%s,爱好:%s,其他:%s' % (name, sex, args, kwargs)) func('糖糖', '喜欢吃冰淇淋', '喜欢唱歌', like='酥酥')
总结
python的函数在定义上与其他语言基本相同,不同的地方一是可返回多个值,二是参数的多样化及传参的多样化,其实实参和形参不管是位置参数默认参数还是按位置传或按关键字传,在其特有的顺序限制下,保证了其传参调用不会混乱。对其参数的理解会更容易帮助记忆,至于顺序为什么是这样,可以自己试试就知道了。
Python学习 day09的更多相关文章
- Python学习day09 - Python进阶(3)
figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...
- python学习 day09打卡 初识函数
本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...
- python学习 day09 (3月14日)----函数
一.函数的进阶 1.1 动态参数 1.2* ** 1.3*args , **kwargs 1.4 函数的注释 1.5名称空间 1.6函数的嵌套全局变量 : 贴边写的局部变量 : 不是贴边写的. ''' ...
- python学习之旅
python学习分类 python基础 +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...
- Python学习--21天Python基础学习之旅(Day08-Day21)
Day08: Chapter 11 异常 1.1如果try代码块中代码运行没有问题,则运行时跳过except代码块.(有异常时执行except中的代码,没有异常则跳过except中的代码) try-e ...
- Python学习--04条件控制与循环结构
Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...
- Python学习--01入门
Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...
- Python 学习小结
python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...
- Python学习路径及练手项目合集
Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159
随机推荐
- ThreadLocal深入理解
作者:知乎用户链接:https://www.zhihu.com/question/23089780/answer/62097840来源:知乎著作权归作者所有.商业转载请联系作者获得授权,非商业转载请注 ...
- (转)jQuery插件编写学习+实例——无限滚动
原文地址:http://www.cnblogs.com/nuller/p/3411627.html 最近自己在搞一个网站,需要用到无限滚动分页,想想工作两年有余了,竟然都没有写过插件,实在惭愧,于是简 ...
- unittest测试框架详谈及实操(三)
断言 unittest的TestCase类提供了很多实用的方法来校验预期结果和程序返回的实际结果是否一致.当然这些方法要求必须满足某些条件才能继续执行接下的测试.大致有3种这样的方法.各覆盖一个特定类 ...
- How to: Cancel a Task and Its Children
http://msdn.microsoft.com/en-us/library/dd537607.aspx using System; using System.Collections.Concurr ...
- Partition--分区切换2
有分区表TB2和TB2_History CREATE TABLE TB2( ID BIGINT IDENTITY(1,1) PRIMARY KEY, C1 NVARCHAR(200))ON[ps_T ...
- kali 下 apache 配置文件
默认的可执行文件 /usr/sbin/apache2 root@ty:/etc/init.d# netstat -anp |grep apache tcp6 ::: :::* LISTEN /apac ...
- SQL Server递归实例
例子一 -- ============================================= -- 根据EID返回其下属的EID,Layer=1表示直接下属,NULL返回所有下属 -- s ...
- 基于 ZKEACMS 的云建站 / 自助建站解决方案
基于ZKEACMS的云建站 / 自助建站解决方案,一站式托管,解决企业建站需求,功能强大,高度自定义.用户只需在界面上输入一些基本信息,选择相应的主题 / 网站模板,然后就可以快速创建一个独一无二的网 ...
- MongoDB集群搭建-分片
MongoDB集群搭建-分片 一.场景: 1,机器的磁盘不够用了.使用分片解决磁盘空间的问题. 2,单个mongod已经不能满足写数据的性能要求.通过分片让写压力分散到各个分片上面,使用分片服务器自身 ...
- coderfoces D. Gourmet choice
D. Gourmet choice time limit per test 2 seconds memory limit per test 256 megabytes 题目链接: https: ...