python初学篇笔记_P12-13《Python爬虫技术5天速成…》学习过程笔记9(超详细记录)...

这篇博客介绍了Python中函数的定义、调用和规范,包括带返回值和不带返回值的函数,以及函数的格式要求。同时,讲解了文件操作的基础,如打开、关闭、读取和写入模式,强调了文件操作中的注意事项。博主尝试利用所学对长文本进行处理,但在实践中遇到编码问题导致失败。
摘要由CSDN通过智能技术生成

a11a524593d78d6860a889a6faa07139.png

对应原视频 第12集 函数 & 第13集 文件操作:dadbe605ccd72f1818024528ed665523.png

本篇概要:

(这两集的学习也没遇到太多什么,知识点学习看视频就好,下面的内容基本是概要,可以用来通过看概要回想检验自己记得什么。)

P12

--定义函数时,规范的格式是上下要留两行空行

--四道课堂小练习题

P13

--个人需求,尝试应用文件操作失败

63d5d86b21fc6ca272a037de1fe9cbb5.png

P12 函数

--函数的概念:

如果在开发程序时,需要某块代码多次,但是为了提高编写的效率以及代码的重用,所以把具有独立功能的代码块组织为一个小模块,这就是函数。

在编程语言里,它有可能叫函数,也有可能叫方法。弹幕说一般封装在类里叫方法。虽然我不懂啥叫类,记一下吧。

a739ef1ba60c42f0cacc586144e75f71.png

--定义函数:

def 函数名( ):

代码

def:define定义

# 函数的调用

# 带参数的函数

我们后边需要进行定义的基本上都是要带参数的。后边实际应用的时候可以多去尝试。

a739ef1ba60c42f0cacc586144e75f71.png

--定义函数时,规范的格式是上下要留两行空行

# 带返回值的函数

我定义函数的时候出现了警告:05ef5846269b5a31737dc676f4c48a1b.png

问题反馈:08a8edf0cc6e6af0714e8540de6059d3.png

说是希望在定义函数的语句前可以留两行空行,定义完之后也留两行空行,再写调用的或其它语句,这样就不会出现下划波浪线警告。不空行也可以执行,就是一直有警告而已,格式不规范。

像这样空了2行就不会:92e2ed990aadb07b9ee0294282f2acb3.png

带返回值的函数,直接执行可以不可以呢?试一下看看。

结果:429720040285093853bbe5a0c7a17685.png直接写,执行后什么也没有。也就是说定义是没有问题的,通过return来返回运算结果。这是没有问题的。

但是它返回之后呢形成了数值,add2num(11, 22),这个地方就相当于你写了一个结果在这里,并没有进行打印输出,也没有进行赋值运算。

所以我们可以直接把它打印出来:# 带返回值的函数

def add2num(a, b):

return a + b         # 通过return返回运算结果

print(add2num(11, 22))

结果:33

这是可行的。

a739ef1ba60c42f0cacc586144e75f71.png

还可以直接在外边定义一个变量。这个我们常用,其实就是一个函数,将它的返回结果赋值给一个变量,然后把变量给打印出来:def add2num(a, b):

return a + b

result = add2num(11, 22)

print(result)

结果:33

这个我们很常用,大家知道它的写法就可以了。一个def,然后别忘了有一个冒号,同样的有这个缩进,这缩进的代码相当于一个代码块。

a739ef1ba60c42f0cacc586144e75f71.png

# 返回多个值的函数

divide:divide除法。整除用两个斜杠表示:\\,除数取整。

直接return,返回几个都可以,多个的用英文逗号分隔。

a739ef1ba60c42f0cacc586144e75f71.png

--四道课堂小练习题

6338d44b4a889bef95c004625d6e330f.png

1、

def printline():

print("-" * 30)

printline()# 调用直接打印一条横线

结果:------------------------------

2、

def printline():

print("-" * 30)

def selfline(a):

for i in range(a):

#       print("-" * 30)

printline()             # 调用第1小题定义的打印横线函数。

selfline(3)

结果:

------------------------------

------------------------------

------------------------------

老师这里用的是while循环。

老师说打印多少行之前用一个input语句获取,由用户决定。这就考虑到现实场景,考虑到了用户输入的过程。这里我是一点都不考虑。

3、

方法1:不带返回值

def add3num(a, b, c):

d = a + b + c

print(d)                 # 带3个参数,不返回值,直接打印。

add3num(1, 3, 5)

结果:9

方法2:带返回值

def add3num(a, b, c):

d = a + b + c

return d                # 带返回值的函数

h = add3num(1, 3, 5)

print(h)

结果:9

直接返回既可以是一个结果,也可以是一个表达式。

这里发现老师写的是直接return,后面表达式:def add3num(a, b, c):

return a + b + c

更简洁了,真合我意。

4、不会。看了老师写的之后,我发现我思路是对的,但把除号写错了。是 /,是 /,是 /。不是\啊。def add3num(a, b, c):

return a + b + c

def average3num(a, b, c):

sumresult = add3num(a, b, c)

ave3result = sumresult/3.0

return ave3result

result = average3num(10, 20, 30)

print(result)

结果:20.0

result = average3num(11, 20, 30)

结果:20.333333333333332

/ 3.0,后面加个小数点,表示平均值是浮点数,除不尽可以有小数点后的数。

老师的变量命名好好,和其本身的含义很相关,看名字就可以想到大概的作用。1:28

a739ef1ba60c42f0cacc586144e75f71.png

20201107

11:46

# 局部变量

在一个函数里进行定义的变量,就叫局部变量。

所以说局部变量的作用,它就是在函数内部定义的变量。不同的函数可以定义相同的名字。

# 全局变量

全局变量之所以叫全局,是因为它在整个文档里是可以被到处访问的。

a = 100              # 全局变量def test1():

print(a)

def test2():

print(a)

test1()

test2()

结果:

100

100在每一个局部变量都没有被定义在每一个函数里的时候,只有一个全局的时候,它默认访问的这个a,其实就是全局的这个a。因为它自己没有定义a,它自己如果再想访问a,那就是全局的a。所以这就是一个全局变量的作用。

可是这个有什么应用场景呀,我知识经验有限无法想到,但希望老师可以讲一下。不是为了学而学,是为了用而学。我现在一直不明白我为什么要学这个,自己的函数里什么都没有定义,这个函数是写出来玩的吗?这里是想用这个例子说明全局变量在函数里的影响。我还是想不到知道来干嘛,为了说明而说明吗?

如果说以后遇到了你就会知道有什么用了,那为什么现在不说明一下既然我现在不能知道而你知道,只有你知道学这个的意义,我呢,在什么都看不到的视野上无意义地记下来,等着所谓的以后你就知道它的作用了。接受的应试教育就是这样,只是一年一年地在那里背在那里记,根本不知道这样做的意义作用。为什么就是一句话两句话一个例子两个例子的事,学的时候就是不说呢。你现在不用知道,你以后就会知道了,啊呸。你当然感觉好啦,你自己知道这是什么,跟别人说清楚太费事,又不是职责。我不知道我在做的是什么,像个傻子那样说怎样做就怎样做,不清楚自己在干什么。那些清楚的(有教学的工作义务者),就是不跟你说。想想那些应试浪费掉的人生,真浪费。(20201219当时突然想到应试教育而写的,很不喜欢“你以后就会知道了”之类的废话,不是对视频内容,我是有多喜欢这个教学视频才做这么详细的笔记你是不知道的,故在次注明一下)

12:49

a739ef1ba60c42f0cacc586144e75f71.png

13:33

如果我全局和局部的这个变量的名字是一样的,会怎么样?局部变量优先使用。

# 在函数中修改全局变量

声明一下:a前加个前缀global。global a。

a739ef1ba60c42f0cacc586144e75f71.png

P13 文件操作

我们经常要用到的就是:打开、关闭、读取、形容。

打开:open

在python中的打开非常简单,就一句话,open,指定一个文件名就可以了,甚至后面这个打开模式‘w’都不用写。f = open("test.txt", "w")在python里边,使用open打开的时候,如果它找了一个不存在的文件,那么它会帮你新建一个。

当然这并不是任何实践都是这样的,因为我这里使用的是w,就是写入的这么个模式。也就是当它发现不存在的时候,它就帮你新建一个,这个w就是准备写的这么一个状态。

w:write写入

a739ef1ba60c42f0cacc586144e75f71.png

关闭:

因为我用一个f变量接收了我打开这个文件的,可以理解为对象,f接收了这个对象。

那我直接用它f . close( ),这样就关闭掉了。f . close()                   # 关闭文件

a739ef1ba60c42f0cacc586144e75f71.png

读取模式:

这里涉及到文件读和写的操作。那么这里的读和写,主要跟这个模式有关。

r:read

w: write

它默认就是r只读模式了。f = open("test.txt")          # 默认模式:r,read只读当这个文件存在的时候,默认打开是没有问题的。但是当你这个文件不存在的时候,你没有任何一个模式的限定,它默认就是一个读取的模式,它就会报错。报的错是一个文件没有找到的错误,说没有这样的一个文件在当前的这样一个路径下,文件不存在。7d64037d16f55055fc60d799a78adc40.png

这样大家就知道了,到底这个代码能不能正常运行,它是由旁边的这个模式的选择来决定的。

最常用的就是r、w,还有以字节的方式进行读和写rb、wb。其它的了解一下就可以。

a739ef1ba60c42f0cacc586144e75f71.png

写入内容:

我们给它写一些内容进去。f = open("test.txt", "w")     # 打开文件,w模式(写模式):文件不存在就新建

f . write("hello world, i am here!")

f . close()                   # 关闭文件

这里我们是没有任何文件的,已经删了。现在用w这个模式,写一句话进去,然后关闭掉。

a739ef1ba60c42f0cacc586144e75f71.png

读取的方式:read

那写完之后能不能读出来呢?可以的。

因为这样一个文件已经存在了,我们直接用r的模式来试一下。f = open("test.txt", "r")

content = f . read(5)

print(content)

f . close()

读完了之后,为什么上来就要加close?就是因为每次读完了之后,还要关闭。这样的话,才能让别的文件或者别的程序继续访问它。所以在这里每一次用都要养成一个好习惯,打开之后关闭。

content = f . read(5),这里的5表示读5个字符出来。

可以发现,这个read,只是在刚打开的时候定位在开头,你执行以后它就往后移5个了。想读多少个就写多少。

# read方法:读取指定的字符,开始时定位在文件头部,每执行一次向后移动指定字符数。

有人说这也太费劲了。我是读一个文件就得写多少个字符,还要查一下吗?

当然不用,你可以一次性读一行,可以不用一个字母一个字母读。

但一个个字符地读,也非常有用。是因为我们在这个网络上的时候,或者文件传输的时候,很有可能你读的是二进制的,或者读的本来就是字符式,那么你就可以直接按照字符的数量来读。因为经常你下载文件的时候,会告诉你这个文件有多大,你就可以按这个文件的个数来读,就行了。这样正好能判断文件是否完全地完成了。如果你自己写个下载器,这个就是非常非常必要的。

a739ef1ba60c42f0cacc586144e75f71.png

读取的方式:按行

readline():读一行

readlines():读多行当我们使用readlines() 的时候,它其实执行的一个过程就是把整个文档都帮你读进来,一个文档全部读完。这比起一个一个字符读要快得多。全部放到内存里,形成一个列表。所以大家知道为什么我们前边要练那么多的列表,那么细致地去讲列表了吧。因为你在文件读的时候取操作的全是列表。

它连换行都能检测出来的。其实上面列表形式的时候就可以看到有换行的标识符的。

以上是关于文件常用的三种读取方式:read,readlines,readline。

a739ef1ba60c42f0cacc586144e75f71.png

你可以去了解一下还有哪一些文件中的操作。在后边我们的这个练习里,这些并不会经常用到。但是如果你自己想写一些桌面的应用程序什么的,还是经常会用到。

强调一下就是,遇到删除啊什么的这样的一些操作的时候,千万要慎重,看清楚路径啊,这个千万不要把电脑的整个系统都给删光了。!!!18:00

a739ef1ba60c42f0cacc586144e75f71.png

--个人需求,尝试应用文件操作失败

20201108

21:35

今天想用网易见外工作台把一个视频或音频转写成文字的,但是不能用了,也不知道还会不会恢复。后面找了另外的网站,转写出来txt文件,但是里面的内容一行超级长,没怎么换行。所以我就想着用python的读写代码来整理文档,每次读指定的字符数,然后写入另外一个空文档。

我将这个转写的文档拷贝到当前程序的目录下了。但是运行的时候并不成功。后面还在考虑要用什么作为循环条件来写个for循环的时候,省了,试只有一次的时候,就出现了下面的问题。

去搜是什么意思,大概是字符编码器什么的问题,好像是说编码方式要匹配什么的,具体我也不懂,是什么问题我的概念很模糊,更不知道怎么解决。

代码是:

f = open(“有内容的文档.txt”, “r”)

w = open(“空文档.txt”, “w”)

# for i

content = f . read(46)

w . write(content)

f . close()

w . close()

结果:7f09356da9fab80aa672faa35dc9a80c.png

第一次想把学的用到实处,宣告失败。未能认识问题并解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值