一、文件的修改

  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. cef相关

    chrome命令行参数:https://www.cnblogs.com/hushaojun/p/5981646.html cef启动调试,启动的命令行:--disable-web-security - ...

  2. 从零开始学习前端JAVASCRIPT — JavaScript中this指向的四种情况

    JavaScript中this的四种情况(非严格模式) 1.当this所在函数是事件处理函数时,this指向事件源.2.当this所在函数是构造函数时,this指向new出来的对象.3.this所在函 ...

  3. element onclick 动态创建元素并绑定onclick事件

    <html> <head> <meta charset="UTF-8"> <title>b</title> <sc ...

  4. 深入理解java虚拟机(七)类加载的时机

    Class 文件中描述的各种信息都必须加载到虚拟机中才能运行和使用.而虚拟机怎么加载这些Class 文件呢?Class 文件进入到虚拟机中会发生什么变化呢? 虚拟机类加载机制是指 虚拟机把描述类的数据 ...

  5. Apache网站服务

    Apache 下载地址: http://mirror.bit.edu.cn/apache/httpd/相关软件下载地址:http://mirror.bjtu.edu.cn/apache/apr/apr ...

  6. Java Input Stream Diagram

    JAVA IO Diagram |-- ByteArrayInputStream |-- BufferedInputStream |-- FileInputStream |-- DataInputSt ...

  7. LDAP 相关链接

    http://www.cnblogs.com/fish-li/archive/2012/05/07/2486840.html细说ASP.NET Windows身份认证 http://www.cnblo ...

  8. Transaction And Lock--已提交读快照

    --===================================================== --行版本控制已提交读ALTER DATABASE DB5 SET READ_COMMI ...

  9. C++11左值引用和右值引用

    转载:https://www.cnblogs.com/golaxy/p/9212897.html C++11的左值引用与右值引用总结 概念 1.&与&&  对于在C++中,大家 ...

  10. layer模态窗简单使用

    layer.open({ type: 1,//模态窗种类 skin: "layui-layer-rim", title: "编辑信息", area: [&quo ...