一、文件的修改

  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的更多相关文章

  1. Python学习day09 - Python进阶(3)

    figure:last-child { margin-bottom: 0.5rem; } #write ol, #write ul { position: relative; } img { max- ...

  2. python学习 day09打卡 初识函数

    本节内容: 1.什么是函数 2.函数定义,函数名,函数体及函数的调用 3.函数的返回值 4.函数的参数 一.什么是函数 函数:对代码块和功能的封装和定义 定义一个事情或者功能.等到需要的时候直接去用, ...

  3. python学习 day09 (3月14日)----函数

    一.函数的进阶 1.1 动态参数 1.2* ** 1.3*args , **kwargs 1.4 函数的注释 1.5名称空间 1.6函数的嵌套全局变量 : 贴边写的局部变量 : 不是贴边写的. ''' ...

  4. python学习之旅

    python学习分类 python基础    +- day01——python初始.变量.常量.注释.基础数据类型.输入.if day02——while.字符串格式化.运算符.编码初识 day03—— ...

  5. Python学习--21天Python基础学习之旅(Day08-Day21)

    Day08: Chapter 11 异常 1.1如果try代码块中代码运行没有问题,则运行时跳过except代码块.(有异常时执行except中的代码,没有异常则跳过except中的代码) try-e ...

  6. Python学习--04条件控制与循环结构

    Python学习--04条件控制与循环结构 条件控制 在Python程序中,用if语句实现条件控制. 语法格式: if <条件判断1>: <执行1> elif <条件判断 ...

  7. Python学习--01入门

    Python学习--01入门 Python是一种解释型.面向对象.动态数据类型的高级程序设计语言.和PHP一样,它是后端开发语言. 如果有C语言.PHP语言.JAVA语言等其中一种语言的基础,学习Py ...

  8. Python 学习小结

    python 学习小结 python 简明教程 1.python 文件 #!/etc/bin/python #coding=utf-8 2.main()函数 if __name__ == '__mai ...

  9. Python学习路径及练手项目合集

    Python学习路径及练手项目合集 https://zhuanlan.zhihu.com/p/23561159

随机推荐

  1. .NET开源MSSQL、Redis监控产品Opserver之Redis配置

    安全与基础配置地址:http://www.cnblogs.com/xiaopotian/p/6898310.html edis监控数据实例的加载可以查看Opserver.Core项目data/Redi ...

  2. sqlserver 2005范例代码查询辞典文摘

    第1章 select 1.显示指定想要获取的列要比使用select *更好 2.where not m.MemberCode = 1000 3.select * into aaa from Membe ...

  3. aspnetcore的那些actionresult们

    比MVC5多了n个actionresult,傻傻分不清,整理了下,妈妈再也不用担心了 https://docs.asp.net/projects/api/en/latest/autoapi/Micro ...

  4. JVM指令集(指令码、助记符、功能描述)

    JVM指令集(指令码.助记符.功能描述) 指令码 助记符 功能描述 0x00 nop 无操作 0x01 aconst_null 指令格式:  aconst_null 功能描述:  null进栈. 指令 ...

  5. CKEditor4.x整合教程-Xproer.WordPaster

    版权所有 2009-2017 荆门泽优软件有限公司 保留所有权利 官方网站:http://www.ncmem.com/ 产品首页:http://www.ncmem.com/webplug/wordpa ...

  6. 设置express ejs模板的后缀名html

    如果使用jade或者ejs模板引擎的话 模板文件的格式为ejs或者jade ,有时候需要将后缀名修改为 html格式的. app.set('view engine','ejs'); app.engin ...

  7. SpringCloud教程 | 第三篇: 服务消费者(Feign)(Finchley版本)

    上一篇文章,讲述了如何通过RestTemplate+Ribbon去消费服务,这篇文章主要讲述如何通过Feign去消费服务. 一.Feign简介 Feign是一个声明式的伪Http客户端,它使得写Htt ...

  8. ubuntu 编译安装 mod_wsgi

    在编译过程中遇到一些问题,记录下来方便别人使用. step1: 下载.windows下面会有编译好的包,Ubuntu没有需要自己编译. 地址: https://github.com/GrahamDum ...

  9. 一些参考网站 - Reference Documentation - Website Address

    Reference Documentation - Website Address MSDN Visual Studio 2015官方文档 https://msdn.microsoft.com/zh- ...

  10. putty连接fedora

    putty提示“Connection refused” 但可以ping通 经查,解决方法如下: 首先判断是否安装ssh rpm -qa openssh rpm -qa openssh-server 之 ...