2019.08.08学习整理

2019.08.08学习整理

文件的高级应用

1.可读、可写

  • r+t: 可读、可写
  • w+t: 可写、可读
  • a+t: 可追加、可读
# wt
with open('36w.txt', 'wt', encoding='utf-8') as fw:print(fw.readable())print(fw.writable())False
True
# w+t
with open('36w.txt', 'w+t', encoding='utf-8') as fw:print(fw.readable())print(fw.writable())True
True
# r+t
with open('36w.txt', 'r+t', encoding='utf-8') as fr:print(fr.readable())print(fr.writable())True
True

2.文件内指针移动

硬盘上从来没有修改一说,硬盘上只有覆盖,即新内容覆盖新内容。

1.seek(offset,whence): offset代表文件指针的偏移量,单位是字节

#seek
with open('b.txt','rt',encoding='utf8')as frprint(f"fr.seek(4,0):{fr.seek(3,0)}") #0相当于文件头开始;1相当于当前文件所在位置;2相当于文件末尾# fr.seek(0,2)  # 切换到文件末尾fr.seek(4, 0): 3

2.tell(): 每次统计都是从文件开头到当前指针所在位置

# tell()
with open('b.txt', 'rt', encoding='utf-8') as fr:fr.seek(4, 0)print(f"fr.tell(): {fr.tell()}")
fr.tell(): 4

3.read(n): 只有在模式下的read(n),n代表的是字符个数,除此之外,其他但凡涉及文件指针的都是字节个数

# read()
with open('b.txt', 'rt', encoding='utf-8') as fr:print(f"fr.read(3): {fr.read(3)}")
fr.read(3): sdf

4.truncate(n): truncate(n)是截断文件,所以文件的打开方式必须可写,但是不能用w或w+等方式打开,因为那样直接清空文件了,所以truncate()要在r+或a或a+等模式下测试效果。它的参照物永远是文件头。并且truncate()不加参数,相当于清空文件。

# truncate()
with open('36r.txt', 'r+t', encoding='utf-8') as fr:fr.truncate(3)

文件修改的两种方式

方式一

将硬盘存放的该文件的内容全部加载到内存,在内存中是可以修改的,修改完毕后,再由内存覆盖到硬盘(word,vim,nodpad++等编辑器)。

import os
with open('a.txt','r',encoding='utf8')as fr,\open('a_swap.txt','w')as fw:data=fr.read()# 全部读入内存,如果文件很大,会很卡data=data.replace('apple','apples')# 在内存中完成修改fw.write(data) # 新文件一次性写入原文件内容
# 删除原文件
os.remove('a.txt')
# 重命名新文件名为原文件名
os.rename('a_swap.txt','a.txt')

方式二

将硬盘存放的该文件的内容一行一行地读入内存,修改完毕就写入新文件,最后用新文件覆盖源文件

import os
with open('a.txt','r',encoding='utf8')as fr,\open('a_swap.txt','w')as fw:# 循环读取文件内容,逐行修改for line in fr:line = line.replace('apples', 'apple')# 新文件写入原文件修改后内容fw.write(line)
os.remove('a.txt')
os.rename('a_swap.txt', 'a.txt')

修改文件内容的思路为:以读的方式打开原文件,以写的方式打开一个新的文件,把原文件的内容进行修改,然后写入新文件,之后利用os模块的方法,把原文件删除,重命名新文件为原文件名,达到以假乱真的目的。

函数的定义

什么是函数

函数就是具备某一功能的工具,事先将工具准备好就是函数的定义,遇到应用场景拿来就用就是函数的调

如何用函数

先定义函数,后调用。

  • 定义函数

    def 函数名()<代码块>return 返回值
  • 调用函数

函数名()

函数定义阶段

def func():bar()# 不属于语法错误,不会报错print('*'*10)
  1. 只检测语法,不执行函数体代码

函数调用阶段

def bar():print('from bar')def foo():print('from foo')bar()foo()
'''
from foo
from bar
'''

执行函数代码

定义函数的三种方式

无参函数

定义函数时参数是函数体接收外部传值的一种媒介,其实就是一个变量名

在函数阶段括号内没有参数,称为无参函数。需要注意的是:定义时无参,意味着调用时也无需传入参数。

如果函数体代码逻辑不需要依赖外部传入的值,必须得定义成无参函数。

def func():print('hello nick')func()  # hello nick

有参函数

在函数定义阶段括号内有参数,称为有参函数。需要注意的是:定义时有参,意味着调用时也必须传入参数。

如果函数体代码逻辑需要依赖外部传入的值,必须得定义成有参函数。

def sum_self(x, y):"""求和"""res = x+yprint(res)sum_self(1,2)  # 3

空函数

当你只知道你需要实现某个功能,但不知道该如何用代码实现时,你可以暂时写个空函数,然后先实现其他的功能。

def func():pass

函数的返回值

什么是返回值

函数内部代码经过一些列逻辑处理获得的结果。

def func():name = 'nick'return namename = func()
print(name)

nick

为什么要有返回值?

现在有一个需求,比较两个人的月薪,然后想获取月薪较大人的年薪。

如果需要在程序中拿到函数的处理结果做进一步的处理,则需要函数必须要有返回值。

需要注意的是:

  • return是一个函数结束的标志,函数内可以有多个return,只要执行到return,函数就会执行。
  • return的返回值可以返回任意数据类型
  • return的返回值无个数限制,即可以使用逗号隔开返回多个值
    • 0个:返回None
    • 1个:返回值是该值本身
    • 多个:返回值是元组
# 为什么要有返回值
def max_self(salary_x, salary_y):if salary_x > salary_y:return salary_xelse:return salary_ymax_salary = max_self(20000, 30000)
print(max_salary*12)
360000
# 函数返回多个值
def func():name = 'nick'age = 19hobby_list = ['read', 'run']return name, age, hobby_listname, age, hobby_list = func()
print(f"name,age,hobby_list: {name,age,hobby_list}")
name,age,hobby_list: ('nick', 19, ['read', 'run'])

函数的参数

形参和实参

形参

在函数定义阶段括号内定义的参数,称之为形式参数,简称形参,本质就是变量名。

def func(x, y):print(x)print(y)

实参

在函数调用阶段括号内传入的参数,称之为实际参数,简称实参,本质就是变量的值。

func(1, 2)

位置参数

位置形参

在函数定义阶段,按照从左到右的顺序依次定义的形参,称之为位置形参。

def func(x, y):print(x)print(y)

特点:按照位置定义的形参,都必须被传值,多一个不行,少一个也不行。

位置实参

在函数调用阶段,按照从左到右的顺序依次定义的实参,称之为位置实参。

func(1, 2)

特点:按照位置为对应的形参依次传值。

关键字实参

在调用函数时,按照key=value的形式为指定的参数传值,称为关键字实参。

func(y=2, x=1)

特点:可以打破位置的限制,但仍能为指定的形参赋值。

注意:

  1. 可以混用位置实参和关键字实参,但是位置实参必须在关键字实参的左边。
  2. 可以混用位置实参和关键字实参,但不能对一个形参重复赋值。

默认形参

在定义阶段,就已经被赋值。

def func(x, y=10):print(x)print(y)func(2)

特点:在定义阶段就已经被赋值,意味着在调用时可以不用为其赋值。

注意:

  1. 位置形参必须放在默认形参的左边。
  2. 默认形参的值只在定义阶段赋值一次,也就是说默认参数的值在函数定义阶段就已经固定了。

转载于:https://www.cnblogs.com/zhangmingyong/p/11322518.html

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

HTML5新标签

<article>标签定义外部的内容。比如来自一个外部的新闻提供者的一篇新的文章&#xff0c;或者来自 blog 的文本&#xff0c;或者是来自论坛的文本。亦或是来自其他外部源内容。 HTML5:<article></article> HTML4:<div></div><aside>标签定…

WD硬盘 C1门 解决办法

不慎我的硬盘是 西数WDC WD10EARS-003BB1 (931 GB) 每天清早来公司 硬盘吱吱嘎嘎启动甚慢&#xff0c;装Windows2003 系统 软件若干&#xff0c;开机时间据金山卫士 测算为7分钟多&#xff0c;让我无比汗颜&#xff0c;且启动后若干分钟什么也干不了&#xff0c;真正能用的时候…

25款操作系统全面接触 [2]

Sun Solaris Sun Microsystems公司早期的操作系统版本Sun OS是基于BSD的。在1993年&#xff0c;他们与AT&T合作&#xff0c;转向了UNIX System V&#xff0c;并发布了称作Solaris.System V release 4的系统&#xff0c;这是一个UNIX System V和BSD的整合体。Solaris系统主…

Windows 10系统永久关闭Windows Defender Antivirus防病毒程序方法

Win R 键运行 gpedit.msc 找到 计算机配置 -> 管理模板 -> Windows 组件 -> Windows Defender 防病毒程序 右边双击 “关闭Windows Defender防病毒”策略 在打开界面选择 “已启用”选项以禁用Windows Defender Antivirus 如果要重新开通则选择 “未配置”选项 转载于…

Hibernate查询缓存

缓存分类&#xff1a; ◆一级缓存Session级 ◆二级缓存SessionFactory级别 JVM级别 Hibernate查询缓存不固定(根据生命周期 来说 不固定) 生命周期&#xff1a; ◆一级缓存 是和 session 会话一直 产生一直消失 ◆二级缓存 是和 sessionFacotry 一致 Hibernate查询缓存 生命周期…

js数组去重、冒泡排序

数组去重&#xff1a; 方法1、双重for循环---最笨的方法 var arr [1, 2, 3,4 ,5,6, 4, 3, 8, 1]function newArrFn (arr) {// 创建一个新的空数组let newArr []for(let i 0;i<arr.length;i){// 设置一个开关&#xff0c;如果是true&#xff0c;就存进去&#xff0c;不是…

Nuget发布Dll

今天要开始写ViewModel了&#xff0c;写完之后系统里的ViewModel都汇总到我这里&#xff0c;然后由我负责ViewModel的发布跟维护&#xff0c;所以Nuget发布Dll就要熟练啦~ 一&#xff0c;安装工具 1&#xff0c;Nuget Package Manager 2,NuGet.exe 下载地址为&#xff1a;http:…

技巧/诀窍:在ASP.NET中重写URL(转)

技巧/诀窍&#xff1a;在ASP.NET中重写URL 【原文地址】Tip/Trick: Url Rewriting with ASP.NET 【原文发表日期】 Monday, February 26, 2007 9:27 PM 经常有人请我指导应该如何动态地“重写”URL&#xff0c;以在他们的ASP.NETweb应用中发布比较干净的URL端点。这个博客帖…

[导入]竟然支持OpenGL ES!

今天意外的发现&#xff0c;原来S60 3rd原生支持OpenGL ES&#xff0c;这下又给我多了乐趣了~~可是很遗憾&#xff0c;我的E50性能不强劲&#xff0c;还是有独立显卡的N93强悍测试达到442 Frames&#xff0c;而我的E50只有可怜的81 Frames。还好&#xff0c;第三版的性能确实要…

2012 winter training @HIT Day 2 解题报告

今天第二天&#xff0c;主要练习二分和枚举。其实我突然发现&#xff0c;当做题突然卡主的时候&#xff0c;不妨想想今天练习的是什么内容…… 传送门http://acm.hit.edu.cn/hoj/contest/view?id100128 Problem A&#xff1a;Crossed Ladders 此题导致本人郁闷一整天。。从哪说…

如何修改myeclipse中web项目的工作路径或默认路径

如何修改myeclipse中web项目的工作路径或默认路径 博客分类&#xff1a; J2EE开发技术指南安装好myeclipse后&#xff0c;第一次启动myeclipse时&#xff0c;都会弹出会弹出Workspace Launcher对话框&#xff0c;叫你设置myeclipse工作路径。通常我们设置完了后&#xff0c;为了…

FreeRTOS操作系统,在按键中断函数中恢复被挂起的任务,程序卡死的原因和解决办法...

出现问题场景&#xff1a;作为刚接触FreeRTOS实时操作系统的菜鸟&#xff0c;我在练习一个程序功能&#xff1a;按键3按下&#xff0c;将LED闪烁的任务挂起&#xff1b;按键4按下&#xff0c;将LED闪烁的任务恢复到就绪。按键使用外部中断。恢复就绪的语句是xTaskResumeFromISR…

无法连接到远程的SQL SERVER2000

1、先保证ping通 2、在dos下写入telnet ip 1433不会报错 3、用ip连如企业管理器&#xff1a; 企业管理器-->右键SQlserver组-->新建sqlserver注册-->下一步-->写入远程实例名&#xff08;IP,机器名&#xff09;-->下一步-->…

妙趣横生算法 3:寻找相同元素的指针

实例说明 在已知两个从小到大的有序的数表中寻找出现的相同元素在第一个数表中的指针。 运行结果 实例解析 设两个数表的首元素指针分别为pa和pb,两个数表分别有元素an和bn个。另外&#xff0c;引入两个指针变量ca和cb,分别指向两个数表的当前访问元素。由于两个数表从小到大有…

PostgreSQL学习手册(PL/pgSQL过程语言)【转】

原文http://www.cnblogs.com/stephen-liu74/archive/2012/06/06/2312759.html 一、概述&#xff1a; PL/pgSQL函数在第一次被调用时&#xff0c;其函数内的源代码(文本)将被解析为二进制指令树&#xff0c;但是函数内的表达式和SQL命令只有在首次用到它们的时候&#xff0c;…

Nginx 笔记与总结(14)expires 缓存设置

设置缓存&#xff0c;可以提高网站性能。 当网站的部分内容&#xff0c;比如新闻站的图片&#xff0c;一旦发布就不太可能发生更改&#xff0c;此时需要用户在访问一次页面之后&#xff0c;把该页面的图片缓存在用户的浏览器端一段时间&#xff0c;就可以用到 nginx 的 expires…

WP7应用开发笔记(8) IP输入框控件

因为需要在手机上配置IP&#xff0c;我需要一个界面输入IP地址&#xff0c;虽然直接使用TextBox&#xff0c;但是这样不太友好&#xff0c;我希望能够有和Windows网络设置上一样的IP输入框。所以决定写一个自定义控件。 设计控件外观 4个TextBox和3个显示“.”的TextBlock就可以…

C#并发实战Parallel.ForEach使用

前言&#xff1a;最近给客户开发一个伙食费计算系统&#xff0c;大概需要计算2000个人的伙食。需求是按照员工的预定报餐计划对消费记录进行检查&#xff0c;如有未报餐有刷卡或者有报餐没刷卡的要进行一定的金额扣减等一系列规则。一开始我的想法比较简单&#xff0c;直接用一…

[MSDN]ASP.NET MVC2(5)MVCRoute和urls

说明&#xff1a;本内容来自微软的webcast&#xff0c;讲师为苏鹏。视频没有书方便(想看哪页就看哪页)&#xff0c;所以抄录要点和老师语录。 内容介绍 - url和routes介绍 - routes匹配url的工作方式 - 使用routes Router对象mvc运转的核心。 预备知…

一个、说到所有的扩展指标

版权声明&#xff1a;本文博客原创文章&#xff0c;博客&#xff0c;未经同意&#xff0c;不得转载。