Python基础知识学习笔记(四)

Python基础知识学习笔记(四)

文章目录

  • Python基础知识学习笔记(四)
    • (四) 函数
      • 1.函数的概念
      • 2.函数的作用
      • 3.函数的定义和调用
        • (1)定义函数的格式:
        • (2)调用函数
      • 4.函数参数
        • (1)定义带有参数函数和调用
      • 5.函数返回值
      • 6.思考一下,Python可不可以返回多个值?
      • 7.函数使用分类
        • (1)自定义函数
          • i. 无参无返回值
          • ii.无参有返回值
          • iv.有参有返回值
        • (2)调用函数
        • (3)练习p12
      • 8.局部变量和全局变量
      • (1)什么是局部变量
      • (2)什么是全局变量?
      • (3)全局变量和局部变量同名问题
      • (4)作用域
    • (五) 文件
      • 1.文件的打开和关闭
        • (1)打开文件
        • (2)文件的关闭
      • 2.文件的读写
        • (1)写操作
        • (2)读操作
          • i.读数据(read)
          • ii.读数据(readline)
          • iii.读取数据(readlines)
      • 3.文件的相关操作
        • (1)文件重命名
        • (2)删除文件
        • (3)创建文件夹
        • (4)获取当前目录
        • (5)改变默认目录
        • (6)获取目录列表
        • (7)删除文件夹
    • (六) 错误与异常
      • 1. 异常简介
      • 2.异常的概念
      • 3.捕获异常
        • i.try…except…
      • 4.捕获异常信息
      • 5.try…except…finally…


(四) 函数

1.函数的概念

由若干语句组成的语句块、函数名称、参数列表构成,具有独立功能的代码块称为函数

2.函数的作用

在结构化编程中,函数是对代码的最基本的封装,一般都是按照功能来封装,封装是为了可以开发程序可以重复使用,减少相同功能代码的冗余,提高编写代码的效率,代码更加简洁,可读性强。

3.函数的定义和调用

(1)定义函数的格式:

def 函数名():
    代码块

(2)调用函数

定义了函数之后,就相当于有了一个具有某些功能的代码,想要让这些代码能够执行,需要调用它,调用函数很简单的,通过 函数名() 即可完成调用

# 定义完函数后,函数是不会自动执行的,需要调用它才可以
函数名()

代码实例:

# 函数的定义
def printof():
    print("---------------------")
    print("人生苦短,我要学Python")
    print("---------------------")
# 函数的调用
printof()

4.函数参数

(1)定义带有参数函数和调用

# 定义
def 函数名(参数1,参数2):
    代码块
# 调用
函数名(参数1,参数2)

代码示例:

# 有参函数的定义
def add(a,b):
    c = a + b
    print(c)
# 调用有参函数
add(3, 5)

5.函数返回值

解决了如何将值传入函数中,但如何获得函数计算出来的结果呢,想要在函数把结果返回给调用者,需要在函数中使用return

代码示例:

# 有参函数的定义,并返回结果给调用者
def add(a,b):
    c = a + b
    return c
# 调用有参函数并获取结果
# 方式一:
print(add(3, 5))
# 方式二:
#调用函数,顺便保存函数的返回值
result = add(3,5)
#因为result已经保存了add的返回值,所以接下来就可以使用了
print(result)

6.思考一下,Python可不可以返回多个值?

可以,对于大多数语言,比如java,C++语言,是不可以,但Python可以

代码示例:

def add(a,b):
    c = a + b
    d = a*b
    return c,d

c,d = add(3, 5)
print(a,b)

7.函数使用分类

(1)自定义函数

i. 无参无返回值
def 函数名():
    执行语句
ii.无参有返回值
def 函数名():
    执行语句
    return 需要返回的数值

注意:

  • 一个函数到底有没有返回值,就看有没有return,因为只有return才可以返回数据
  • 函数中,可以有多个return语句,但是只要执行到一个return语句,那么就意味着这个函数的调用完成

iii.有参无返回值

def 函数名(形参列表):
    执行语句

注意

  • 在调用函数时,如果需要把一些数据一起传递过去,被调用函数就需要用参数来接收

  • 参数列表中变量的个数根据实际传递的数据的多少来确定

    iv.有参有返回值
def 函数名():
    执行语句
    return 需要返回的值

(2)调用函数

i.调用函数的方式:

函数名([实参列表])

ii.调用有参函数时,实参的个数和先后顺序应该和定义函数中的要求一致,不可不对等和顺序有变动,否则结果会出问题

iii.调用有返回值的函数,可以用一个变量来保存这个函数的计算结果

(3)练习p12

[外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上传(img-9AQBVqox-1647784608364)(C:\Users\荔枝\AppData\Roaming\Typora\typora-user-images\image-20220304164056507.png)]

8.局部变量和全局变量

(1)什么是局部变量

定义在函数内部的变量

def test1():
    a = 200 # 局部变量
    print("---------test1--修改前--a=%d"%a)
    a = 300 # 局部变量可以修改值
    print("---------test1--修改后--a=%d"%a)
def test2():
    a = 400 # 局部变量,不同函数,局部变量名可以相同,互不影响
    print("---------test2--a=%d"%a)
test1()
test2()

运行结果:

---------test1--修改前--a=200
---------test1--修改后--a=300
---------test2--a=400

小总结:

  • 局部变量,就是在函数内部定义的变量
  • 不同的函数,可以定义相同的名字的局部变量,但是各用个的不会产生影响
  • 局部变量的作用,为了临时保存数据需要在函数中定义变量来进行存储,这就是它的作用

(2)什么是全局变量?

如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是 全局变量

# 定义一个全局变量
a = 100
# 定义两个函数
def test1():
    print(a)
def test2():
    print(a)

(3)全局变量和局部变量同名问题

当全局变量和局部变量同名,如何修改全局变量的值?

代码如下:

# 定义一个全局变量
a = 100

def test1():
    a = 200 # 局部变量
    print("---------test1--修改前--a=%d"%a)
    a = 300 # 局部变量可以修改值
    print("---------test1--修改后--a=%d"%a)
def test2():
    a = 400 # 局部变量
    print("---------test2--a=%d"%a)
test1()
test2()

运行结果:

---------test1--修改前--a=200
---------test1--修改后--a=300
---------test2--a=400

和局部变量中的示例结果一样

修改全局变量方法:使用global在变量名前进行声明

代码如下:

# 定义一个全局变量
a = 100
def test1():
    global a #变量名a被global修饰之后,就变成了全局变量
    a = 600 # 修改全局变量的值
    print("---------test1--修改全局变量值后--a=%d"%a)
    a = 300 # 局部变量变为全局变量,再次修改了全局变量的值
    print("---------test1--全局变量--a=%d"%a)
def test2():
    a = 400 # 局部变量不变
    print("---------test2--局部变量a=%d"%a)
def test3():
    print('---全局变量---a=%d'%a)
test1()
test2()
test3()

运行结果:

---------test1--修改全局变量值后--a=600
---------test1--全局变量--a=300
---------test2--a=400
---全局变量---a=300

小总结:

  • 在函数外边定义的变量叫做 全局变量
  • 全局变量能够在所有的函数中进行访问如果在函数中修改全局变量,那么就需要使用 global 进行声明,否则出错
  • 如果全局变量的名字和局部变量的名字相同,那么使用的是局部变量的,小技巧**就近原则**

(4)作用域

1.在一个函数中定义的变量,只能在本函数中用(局部变量)

2.在函数外定义的变量,可以在所有的函数中使用(全局变量)

(五) 文件

1.文件的打开和关闭

(1)打开文件

在Python,使用open()函数,可以打开一个已经存在的文件或者创建一个新文件

语法格式:

open(文件名,访问模式)

访问模式是对文件的权限,是否可读,是否可写,具体如下:

访问模式 说明
r 以只读方式打开文件。文件的指针将会放在文件的开头。这是默认模式
w 打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
a 打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
rb 以二进制格式打开一个文件用于只读。文件指针将会放在文件的开头。这是默认模式
wb 以二进制格式打开一个文件只用于写入。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
ab 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。也就是说,新的内容将会被写入到已有内容之后。如果该文件不存在,创建新文件进行写入
r+ 打开一个文件用于读写。文件指针将会放在文件的开头
w+ 打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件
a+ 打开一个文件用于读写。如果该文件已存在,文件指针将会放在文件的结尾。文件打开时会是追加模式。如果该文件不存在,创建新文件用于读写
rb+ 以二进制格式打开一个文件用于读写。文件指针将会放在文件的开头。
wb+ 以二进制格式打开一个文件用于读写。如果该文件已存在则将其覆盖。如果该文件不存在,创建新文件。
ab+ 以二进制格式打开一个文件用于追加。如果该文件已存在,文件指针将会放在文件的结尾。如果该文件不存在,创建新文件用于读写

代码示例:

f = open("test.txt",'w') # 打开文件,没有则新建,w是代表可对文件写入内容

注意:文件默认会新建并保留在当前项目文件目录下。

(2)文件的关闭

在Python,使用close()函数,可以关闭一个已经打开的文件

代码示例:

# 新建一个文件,文件名为:test.txt
f = open('test.txt', 'w')
# 关闭这个文件
f.close()
1234

2.文件的读写

(1)写操作

在python中,使用write()可以完成向文件写入数据

代码示例:

f = open('test.txt', 'w')
f.write('hello world, i am here!')
f.close()

注意:如果文件不存在那么创建,如果存在那么就先清空,然后写入数据

(2)读操作

i.读数据(read)

在python中,使用read(number)函数以完成从文件中读取数据number表示要从文件中读取的数据的长度(单位是字节),如果没有传入number,那么就表示读取文件中所有的数据.

代码示例:

f = open('test.txt', 'r')
content = f.read(5)
print(content)
print("-"*30)
content = f.read()
print(content)
f.close()

注意:

  • 如果open是打开一个文件,那么可以不用写打开的模式,即只写 open(‘test.txt’),默认是只读。

  • 如果使用读了多次,那么后面读取的数据是从上次读完后的位置开始的。

ii.读数据(readline)

一次性读取一行数据

代码示例:

file = open("test.txt","r")
content = file.readline() # 对文件读取一行
print(content)
content = file.readline() # 对文件读取下一行
print(content)
file.close()
iii.读取数据(readlines)

按照行的方式把整个文件中的内容进行一次性读取,并且返回一个列表,其中每一行的数据为一个元素

#coding=utf-8
f = open('test.txt', 'r')
content = f.readlines()  # 一次性读取全部文件为列表,每行一个字符串元素
print(type(content))
i=1
for temp in content:
	print("%d:%s"%(i, temp))  # 打印行号和每行的内容
	i+=1
f.close()

3.文件的相关操作

对于文件操作看不懂的,请先学习Linux基础知识,[https://blog.csdn.net/QZP51ZX/article/details/108047995]

(1)文件重命名

os模块中的rename()可以完成对文件的重命名操作

os.rename(需要修改的文件名, 新的文件名)

代码示例:

import os
os.rename("test.txt","test01.txt")

注意:需要修改的文件名一定要存在,否则报错!

(2)删除文件

os模块中的remove()可以完成对文件的删除操作,看清路径 ,不要误删。

remove(待删除的文件名)

代码示例:

import os
os.remove("test01.txt")

注意:需要删除的文件一定要存在,否则报错!

(3)创建文件夹

os模块中的mkdir()可以完成创建文件夹操作

mkdir(待创建的文件夹)

代码示例:

import os
os.mkdir('python')

注意:创建文件夹一定要保证之前不存在,否则报错!

(4)获取当前目录

os模块中的getcwd()可以查看文件所在的具体位置

getcwd()

代码示例:

import os
os.getcwd()

(5)改变默认目录

os模块中的chair()可以改变当前的所在路径

代码示例:

import os
os.chair("../") # 返回上一级目录

(6)获取目录列表

os模块中的listdir()可以查看当前目录列表

代码示例:

import os
os.listdir("./") # 查看当前目录的所有文件

(7)删除文件夹

os模块中的rmdir()删除指定文件夹

代码示例:

import os
os.rmdir("python")

注意:需要删除的文件夹一定要存在,否则报错!

(六) 错误与异常

1. 异常简介

异常是什么?什么时候会发生异常?话不多说,直接上代码。

当打开一个不存在的文件时,对文件操作比较熟悉就知道,一定会报错,不信的话,咱们试试?

print("----test1------")
f = open("123.txt","r") # 打开123.txt文件
print("----test2--------")

运行结果:

----test1------
Traceback (most recent call last):
  File "F:/pythonProject/pythonProject/demo3-4.py", line 8, in <module>
    f = open("123.txt","r")
FileNotFoundError: [Errno 2] No such file or directory: '123.txt'

说明:

打开一个不存在的文件123.txt,当找不到123.txt 文件时,就会抛出给我们一个IOError类型的错误,No such file or directory:123.txt (没有123.txt这样的文件或目录)

2.异常的概念

当Python检测到一个错误时,解释器就无法继续执行了,反而出现了一些错误的提示,这就是所谓的"异常"

3.捕获异常

i.try…except…

代码示例:

try:
    print("----test1------")
    f = open("123.txt", "r")
    print("----test2--------")
except IOError:
    pass
123456

运行结果:

----test1------

说明:

  • 此程序看不到任何错误,因为用 except 捕获到了IOError异常,并添加了处理的方法
  • pass 表示实现了相应的实现,但什么也不做;如果把pass改为print语句,那么就会输出其他信息
  • 把可能出现的异常的代码放在try中,把会出现异常结果写在except中
  • except可以捕获多个异常,用括号括起来,逗号隔开 ,示例如下

当出现多个异常时

代码示例:

try:
    print("----test1------")
    f = open("123.txt", "r")
    print("----test2--------")
    
    print(num)
except (IOError,NameError): #捕获多个异常的写法
    print("产生了异常")

4.捕获异常信息

代码示例:

try:
    print("----test1------")
    f = open("123.txt", "r")
    print("----test2--------")
    print(num)
except (IOError,NameError) as result: #捕获多个异常的写法,将异常信息存储在result中进行打印
    print("产生了异常")
    print(result)

5.try…except…finally…

在程序中,如果一个段代码必须要执行,即无论异常是否产生都要执行,那么此时就需要使用finally。 比如文件关闭,释放锁,把数据库连接返还给连接池等

代码示例:

import time
try:
	f = open('test.txt')
	try:
		while True:
		content = f.readline()
		if len(content) == 0:
			break
		time.sleep(2)
		print(content)
	except:
		#如果在读取文件的过程中,产生了异常,那么就会捕获到
		#比如 按下了 ctrl+c
	pass
	finally:
		f.close()
		print('关闭文件')
except Exception as result:
	print("发生异常")

你可能感兴趣的:(Python,python)