内容正文:
项目四 函数与模块
Contents
函数的定义与调用
函数的参数列表与返回值
模块的使用方法
函数的定义与调用
PART 01
函数就是由部分语句集合而成的一个通用的程序功能部件,是Python语言中最基本的组成工具。
我们可以在程序中多次调用函数,令其在程序中执行多次。
在函数定义过程中,可以设定函数的返回值,并且也可以每次改变作为函数输入的参数来得到不同的结果。
以函数的形式去“包裹”一个具体的操作,使这个操作变成一个可以广泛应用的工具,这样在不同情形下我们都可以轻松调用函数完成目标操作。
前言
4
Python语言中使用函数分为两个步骤:定义函数和调用函数。
定义函数,即根据函数的输入、输出和数据处理完成函数代码的编写。定义函数只是规定了函数会执行什么操作,但并不会真正去执行。
调用函数,即真正去执行函数中的代码,是指根据传入的数据完成特定的运算,并将运算结果返回到函数调用位置的过程。
函数的定义与调用
5
函数的定义与调用
【任务描述】
了解函数的定义与调用
【关键步骤】
了解函数的定义与调用
示例01
1 def CalCircleArea(): #定义名字为CalCircleArea的函数
2 s=3.14*3*3 #计算半径为3的圆的面积
3 print('半径为3的圆的面积为:%.2f'%s) #将计算结果输出
4 CalCircleArea() #调用函数CalCircleArea
示例
程序执行完毕后,将在屏幕上输出28.26。
函数的定义与调用
示例01
代码缩进 4个空格
正文缩进1.27厘米
7
流程图
程序运行后,会直接执行第4行代码CalCircleArea(),然后通过该函数调用转去执行第1-3行的代码。
CalCircleArea函数执行结束后,会回到函数调用位置继续执行,因为后面没有其他代码,所以程序结束。
函数的定义与调用
8
参数列表与返回值
PART 02
参数列表与返回值实际上就是实现一个函数的输入和输出功能。
通过函数的参数列表,可以为函数传入待处理的数据,从而使得一个函数更加通用。
通过返回值,可以将函数的计算结果返回到函数调用的位置,从而可以利用函数调用返回的结果再去做其他运算。
参数列表与返回值
10
计算零件面积
对于计算圆面积的函数CalCircleArea,可以将半径r作为参数,这样每次调用CalCircleArea函数时只要传入不同的半径值,函数就可以自动计算出传入半径所对应的圆的面积。
我们要计算零件的面积,则需要先计算半径分别为r1和r2的圆的面积C1和C2,以及边长分别为d11和d12、d21和d22的两个长方形的面积S1和S2,然后通过计算C1-C2-S1-S2或C1-(C2+S1+S2)得到零件面积。
参数列表与返回值
11
参数列表与返回值
【任务描述】
了解参数列表与返回值
了解形参与实参的作用
【关键步骤】
了解参数列表与返回值
了解形参与实参的作用
示例02
1 def CalCircleArea(r): #定义名字为CalCircleArea的函数
2 s=3.14*r*r #计算半径为r的圆的面积
3 print('半径为%.2f的圆的面积为:%.2f'%(r,s)) #将计算结果输出
4 def CalRectArea(a,b): #定义名字为CalRectArea的函数
5 s=a*b #计算边长分别为a和b的长方形的面积
6 print('边长为%.2f和%.2f的长方形的面积为:%.2f'%(a,b,s)) #将计算结果输出
形参是定义函数时函数名后面的一对小括号中给出的参数列表。形参的作用是接收函数调用时传入的参数值。
参数列表与返回值
示例02
代码缩进 4个空格
正文缩进1.27厘米
13
1 a=eval(input('请输入圆的半径:'))
2 CalCircleArea(a)
3 x=eval(input('请输入长方形的一条边长:'))
4 y=eval(input('请输入长方形的另一条边长:'))
5 CalRectArea(x,y)
实参是在调用函数时函数名后面的小括号中给出的参数列表。当调用函数时,会将实参的值传递给对应的形参。
执行程序后,如果输入圆的半径为3,输入长方形的两条边长分别为3.5和2,则在屏幕上会输出如下结果:
请输入圆的半径:3
半径为10.00的圆的面积为:28.26
请输入长方形的一条边长:3.5
请输入长方形的另一条边长:2
边长为3.50和2.00的长方形的面积为:7.00
参数列表与返回值
示例02
代码缩进 4个空格
正文缩进1.27厘米
14
当实参传递给形参后,如果在函数体中对形参值做修改,则该修改并不会影响实参,即实参值不会改变。
但如果实参是列表等对象时,可在函数体中通过形参修改实参列表中对应元素的值。
同时定义多个变量
代码缩进 4个空格
正文缩进1.27厘米
15
定义多个变量
【任务描述】
了解多个变量的定义和使用方法
【关键步骤】
了解多个变量的定义和使用方法
示例03
1 def ModifyVal(x,y): #ModifyVal函数定义
2 x=y #将y的值赋给形参x
3 def ModifyListElement(ls,idx,val): #ModifyListElement函数定义
4 ls[idx]=val #将ls中下标为idx的元素值赋为val
5 a,b=5,10 #a和b的值分别赋为5和10
6 print(a,b) #输出5和10
7 ModifyVal(a,10) #调用ModifyVal函数试图将a赋为10,但实际不会修改a的值
8 print(a,b) #仍输出5和10
9 c=[1,2,3] #c的值赋为[1,2,3]
10 print(c) #输出[1,2,3]
11 ModifyVal(c,[4,5,6]) #调用ModifyVal函数试图将c赋为[4,5,6],但实际不会修改
12 print(c) #仍输出[1,2,3]
13 ModifyListElement(c,1,5) #调用ModifyListElement函数将下标为1的元素赋为5
14 print(c) #输出[1,5,3]
定义多个变量
示例03
代码缩进 4个空格
正文缩进1.27厘米
17
程序执行结束后,会在屏幕上输出如下结果:
5 10
5 10
[1, 2, 3]
[1, 2, 3]
[1, 5, 3]
示例03
默认参数
【任务描述】
了解自定义函数中的默认参数
【关键步骤】
了解自定义函数中的默认参数
示例04
1 def StudentInfo(name,country='中国'): #参数country的默认参数值为'中国'
2 print('姓名:%s,国家:%s'%(name,country))
3 StudentInfo('李晓明') #这里没有给country传实参值,但因为有默认参数所以不会出错
4 StudentInfo('大卫','美国') #给country传了实参,则不再使用默认参数
函数的默认参数就是缺省参数,即当调用函数时,如果没有为某些形参传递对应的实参,则这些形参会自动使用默认参数值。
程序执行完毕后,将在屏幕上输入如下结果:
姓名:李晓明,国家:中国
姓名:大卫,国家:美国
默认参数
示例04
代码缩进 4个空格
正文缩进1.27厘米
20
关键字参数
【任务描述】
了解关键字参数的使用方式
【关键步骤】
了解关键字参数的使用方式
示例05
1 def StudentInfo(name, chineselevel='良好', country='中国'):
2 print('姓名:%s,中文水平:%s,国家:%s'%(name,chineselevel,country))
3 StudentInfo('李晓明')
4 StudentInfo('大卫', country='美国')
5 StudentInfo(country='美国', chineselevel='一般', name='约翰')
关键字参数的形式为“形参=实参”
程序执行完毕后,将在屏幕上输入如下结果:
姓名:李晓明,国家:中国
姓名:大卫,国家:美国
关键字参数
示例05
代码缩进 4个空格
正文缩进1.27厘米
22
def 函数名([普通形参列表,] *不定长参数名 [,普通形参列表]):
函数体
或
def 函数名([普通形参列表,] **不定长参数名):
函数体
不定长参数,即在调用函数时可以接收任意数量的实参,这些实参在传递给函数时会被封装成元组(位置参数)或字典(关键字参数)形式。
第一种定义方法使用“*不定长参数名”的方式,表示这个不定长参数对应的是一组位置参数;
而第二种定义方法使用“**不定长参数名”的方式,表示这个不定长参数对应的是一组关键字参数。
不定长参数
代码缩进 4个空格
正文缩进1.27厘米
23
不定长参数
【任务描述】
了解不定长参数的使用方法
【关键步骤】
了解不定长参数的使用方法
示例05
1 def StudentInfo1(name, *args): #定义函数StudentInfo1
2 print('姓名:', name, ',其他:', args)
3 def StudentInfo2(name, **args): #定义函数StudentInfo2
4 print('姓名:', name, ',其他:', args)
5 def StudentInfo3(name, *args, country='中国'): #定义函数StudentInfo3
6 print('姓名:', name, ',国家:', country, ',其他:', args)
7 StudentInfo1('李晓明', '良好', '中国')
8 StudentInfo2('李晓明', 中文水平='良好', 国家='中国')
9 StudentInfo3('李晓明', 19, '良好')
10 StudentInfo3('大卫', 19, '良好', country='美国')
不定长参数
示例05
代码缩进 4个空格
正文缩进1.27厘米
25
程序执行完毕后,将会输出如下结果:
姓名: 李晓明 ,其他: ('良好', '中国')
姓名: 李晓明 ,其他: {'中文水平': '良好', '国家': '中国'}
姓名: 李晓明 ,国家: 中国 ,其他: (19, '良好')
姓名: 大卫 ,国家: 美国 ,其他: (19, '良好')
示例05
拆分参数列表
【任务描述】
了解列表、元组或字典形式参数的拆分
【关键步骤】
了解列表、元组或字典形式参数的拆分
示例07
1 def SumVal(*args): #定义函数SumVal
2 sum=0
3 for i in args:
4 sum+=i
5 print('求和结果为:',sum)
6 ls=[3,5.2,7,1]
7 SumVal(ls[0],ls[1],ls[2],ls[3])
如果一个函数所需要的参数已经存储在了列表、元组或字典中,则可以直接从列表、元组或字典中拆分出来函数所需要的这些参数,其中列表、元组拆分出来的结果作为位置参数,而字典拆分出来的结果作为关键字参数。
程序运行结束后,将在屏幕上输出如下结果:
求和结果为: 16.2
实际上,第7行代码可以简写为SumVal(*ls)。
拆分参数列表
示例07
代码缩进 4个空格
正文缩进1.27厘米
28
1 def StudentInfo(name, chineselevel, country): #定义函数StudentInfo
2 print('姓名:%s,中文水平:%s,国家:%s'%(name,chineselevel,country))
3 d={'country': '中国', 'chineselevel':'良好', 'name':'李晓明'}
4 StudentInfo(**d)
将字典的拆分结果作为函数的关键字参数。
程序运行结束后,将在屏幕上输出如下结果:
姓名:李晓明,中文水平:良好,国家:中国
拆分参数列表
示例07
代码缩进 4个空格
正文缩进1.27厘米
29
函数返回值
【任务描述】
使用return获取函数返回值
【关键步骤】
使用return获取函数返回值
示例03
1 def CalCircleArea(r): #定义函数CalCircleArea
2 return 3.14*r*r #通过return语句将计算得到的圆面积返回
3 def CalRectArea(a,b): #定义函数CalRectArea
4 return a*b #通过return语句将计算得到的长方形面积返回
5 r1,r2,d11,d12,d21,d22=10,1,4,5,6,5
6 C1=CalCircleArea(r1) #计算大圆的面积
7 C2=CalCircleArea(r2) #计算小圆的面积
8 S1=CalRectArea(d11,d12) #计算第一个长方形面积
9 S2=CalRectArea(d21,d22) #计算第二个长方形面积
10 A=C1-C2-S1-S2 #大圆面积依次减去小圆和两个长方形面积,即得到零件面积
11 print('零件面积为:%.2f'%A) #将零件面积输出
return语句将函数中的运算结果返回到函数调用的位置。
程序运行结束后,将在屏幕上输出如下结果:
零件面积为:260.86
函数返回值
示例08
代码缩进 4个空格
正文缩进1.27厘米
31
1 def GetList(): #定义函数GetList
2 return [1,2,3] #将包含3个元素的列表返回
3 def GetTuple(): #定义函数GetTuple
4 return (1,2,3) #将包含3个元素的元组返回
5 def GetElements(): #定义函数GetElements
6 return 1,2,3 #返回3个数值数据,实际上会将这3个数据封装成一个元组返回
7 print(type(GetList()))
8 print(GetList())
9 print(type(GetTuple()))
10 print(GetTuple())
11 print(type(GetElements()))
12 print(GetElements())
通过return不仅能够返回数值数据,也可以返回字符串、列表、元组等数据。
函数返回值
示例08
代码缩进 4个空格
正文缩进1.27厘米
32
程序运行结束后,将在屏幕上输出如下结果:
<class 'list'>
[1, 2, 3]
<class 'tuple'>
(1, 2, 3)
<class 'tuple'>
(1, 2, 3)
示例08
模块
PART 03
按照代码功能的不同,将代码分门别类地放在不同的脚本文件中,这些脚本文件就称为是模块(Module)。
当要使用一个模块中的某些功能时,我们可以通过import方式将该模块导入。
模块
35
import model1
import model2
…
import modelN
或
import model1, model2, ..., modelN
使用import语句导入模块语法如下:
Import
代码缩进 4个空格
正文缩进1.27厘米
36
加载模块
【任务描述】
了解import和from import的使用方法
了解包的含义和加载
【关键步骤】
了解import和from import的使用方法
了解包的含义和加载
示例09
1 def PrintFib(n): #定义函数PrintFib,输出斐波那契数列的前n项
2 a, b = 1, 1 #将a和b都赋为1
3 for i in range(1,n+1): #i的取值依次为1,2,…,n
4 print(a, end=' ') #输出斐波那契数列的第i项
5 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值
6 print() #输出一个换行
7 def GetFib(n): #定义函数GetFib,返回斐波那契数列的前n项
8 fib=[] #定义一个空列表fib
9 a, b = 1, 1 #将a和b都赋为1
10 for i in range(1,n+1): #i的取值依次为1,2,…,n
11 fib.append(a) #将斐波那契数列的第i项存入列表fib中
12 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值
13 return fib #将列表fib返回
14 PrintFib(10) #调用PrintFib输出斐波那契数列前10项
15 ls=GetFib(10) #调用GetFib函数获取斐波那契数列前10项组成的列表
16 print(ls) #输出列表ls中的元素
定义一个名字为fibo.py的脚本文件,其中包括PrintFib和GetFib两个函数的定义。
加载模块
示例09
代码缩进 4个空格
正文缩进1.27厘米
38
程序执行完毕后,将在屏幕上输出如下结果:
1 1 2 3 5 8 13 21 34 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
示例09
1 import fibo #导入fibo模块
2 fibo.PrintFib(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列前5项
3 ls=fibo.GetFib(5) #调用fibo模块中的GetFib函数,得到斐波那契数列前5项的列表
4 print(ls) #输出ls中保存的斐波那契数列前5项
再定义一个名字为testfibo.py的脚本文件。
程序执行完毕后,将在屏幕上输出如下结果:
1 1 2 3 5 8 13 21 34 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
1 1 2 3 5
[1, 1, 2, 3, 5]
加载模块
示例09
代码缩进 4个空格
正文缩进1.27厘米
40
导入模块后,如果要使用该模块中定义的标识符,则需要通过“模块名.标识符名”的方式。
从程序输出结果可以看到,虽然我们只在testfibo.py中输出了斐波那契数列的前5项,但当我们import fibo时,fibo.py中第14至16行代码也执行了,所以会同时输出斐波那契数列的前10项数据。
示例09
希望一个脚本文件,单独运行时就执行这些语句;而作为模块导入时,就不执行这些语句。
要实现这个功能,需要用到每个模块中都有的一个全部变量__name__。
__name__的作用是获取当前模块的名称,如果当前模块是单独执行的,则其__name__的值就是__main__;
否则,如果是作为模块导入,则其__name__的值就是模块的名字。
加载模块
示例09
42
module.py
1 print(__name__) #输出全局变量__name__的值
testmodule.py
1 import module #导入module模块
当我们执行module.py时,会在屏幕上输出:__main__;
而当我们执行testmodule.py时,则会在屏幕上输出:module。
即module.py单独运行和作为模块导入时其__name__的值是不同的。
加载模块
示例09
43
修改后的fibo.py
1 def PrintFib(n): #定义函数PrintFib,输出斐波那契数列的前n项
2 a, b = 1, 1 #将a和b都赋为1
3 for i in range(1,n+1): #i的取值依次为1,2,…,n
4 print(a, end=' ') #输出斐波那契数列的第i项
5 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值
6 print() #输出一个换行
7 def GetFib(n): #定义函数GetFib,返回斐波那契数列的前n项
8 fib=[] #定义一个空列表fib
9 a, b = 1, 1 #将a和b都赋为1
10 for i in range(1,n+1): #i的取值依次为1,2,…,n
11 fib.append(a) #将斐波那契数列的第i项存入列表fib中
12 a, b = b, a+b #更新斐波那契数列第i+1项的值,并计算第i+2项的值
13 return fib #将列表fib返回
14 if __name__=='__main__': #只有单独执行fibo.py时该条件才成立
15 PrintFib(10) #调用PrintFib输出斐波那契数列前10项
16 ls=GetFib(10) #调用GetFib函数获取斐波那契数列前10项组成的列表
17 print(ls) #输出列表ls中的元素
加载模块
示例09
44
此时,当执行fibo.py时,将在屏幕上输出如下结果:
1 1 2 3 5 8 13 21 34 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
当执行testfibo.py时,将在屏幕上输出如下结果:
1 1 2 3 5
[1, 1, 2, 3, 5]
加载模块
示例09
45
除了可以导入自己编写的模块外,也可以直接导入系统提供的模块,使用其中的功能。例如,我们可以通过sys模块获取运行Python脚本时传入的参数,如下面的代码所示。
1 import fibo #导入fibo模块
2 import sys #导入系统提供的sys模块
3 n=int(sys.argv[1]) #通过sys模块的argv获取执行脚本时传入的参数
4 fibo.PrintFib(n) #调用fibo模块中的PrintFib函数,输出斐波那契数列前n项
5 ls=fibo.GetFib(n) #调用fibo模块中的GetFib函数,得到斐波那契数列前n项的列表
6 print(ls) #输出ls中保存的斐波那契数列前n项
加载模块
示例09
46
在系统控制台下,如果执行“python testfibo.py 5”,则会输出如下结果:
1 1 2 3 5
[1, 1, 2, 3, 5]
如果执行“python testfibo.py 10”,则会输出如下结果:
1 1 2 3 5 8 13 21 34 55
[1, 1, 2, 3, 5, 8, 13, 21, 34, 55]
示例09
可以使用from import将模块中的标识符(变量名、函数名等)直接导入当前环境,这样我们在访问这些标识符时就不再需要指定模块名。
from 模块名 import 标识符1, 标识符2, ..., 标识符N
加载模块
示例09
48
1 from fibo import PrintFib, GetFib #导入fibo模块中的PrintFib和GetFib
2 PrintFib(5) #忽略fibo模块名直接调用PrintFib函数
3 ls=GetFib(5) #忽略fibo模块名直接调用GetFib函数
4 print(ls) #输出ls中保存的斐波那契数列前5项数据
程序执行结束后,将在屏幕上输出如下结果:
1 1 2 3 5
[1, 1, 2, 3, 5]
加载模块
示例09
49
1 from fibo import PrintFib #只导入fibo模块中的PrintFib
2 PrintFib(5) #忽略fibo模块名直接调用PrintFib函数
程序执行结束后,将在屏幕上输出如下结果:
1 1 2 3 5
也可以改为只导入一个模块中的部分标识符,如下面的代码所示:
加载模块
示例09
50
1 import fibo as f #导入fibo模块,并为fibo起了个别名f
2 f.PrintFib(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列前5项
无论是利用import导入模块、还是用from import导入模块中的标识符,在导入的同时都可以使用as为模块或标识符起别名。
1 from fibo import PrintFib as pf #导入fibo模块中的PrintFib,并重命名为pf
2 pf(5) #调用fibo模块中的PrintFib函数,输出斐波那契数列前5项
加载模块
示例09
51
Python中的包(Package)的作用与操作系统中文件夹的作用相似,利用包可以将多个关系密切的模块组成在一起,一方面方便进行各脚本文件的管理,另一方面可以有效避免模块命名冲突问题。
定义一个包,就是创建一个文件夹并在该文件夹下创建一个__init__.py文件,文件夹的名字就是包名。
另外,可以根据需要在该文件夹下再创建子文件夹,子文件夹中创建一个__init__.py文件,则又形成了一个子包。
模块可以放在任何一个包或子包中,在导入模块时需要指定所在的包和子包的名字。例如,如果要导入包A中的模块B,则需要使用“import A.B”。
包
52
sound/ 顶级包
__init__.py 初始化这个声音包
formats/ 文件格式转换子包
__init__.py
wavread.py
wavwrite.py
aiffread.py
aiffwrite.py
auread.py
auwrite.py
...
effects/ 音效子包
__init__.py
echo.py
surround.py
reverse.py
...
filters/ 过滤器子包
__init__.py
equalizer.py
vocoder.py
karaoke.py
...
下面通过Python官方文档中的一个例子理解包的结构和使用方法。下面是关于声音数据处理的包结构:
包
53
如果要使用sound包的effects子包的echo模块,则可以通过下面方式导入:
import sound.effects.echo
假设在echo模块中有一个echofilter函数,则调用该函数时必须指定完整的名字(包括各层的包名和模块名),即:
from sound.effects import echo
也可以使用from import方式导入包中的模块,如:
sound.effects.echo.echofilter(实参列表)
echo.echofilter(实参列表)
通过这种方式,也可以正确导入sound包的effects子包的echo模块,而且在调用echo模块中的函数时不需要加包名:
包
54
使用from import也可以直接导入模块中的标识符,如:
from sound.effects.echo import echofilter
这里直接导入了echo模块中的echofilter函数,此时调用echofilter函数可直接写作:
echofilter(实参列表)
包
55
猴子补丁是指在运行时动态替换已有的代码,而不需要修改原始代码。
1 def Sum(a,b): #定义函数Sum
2 print('Sum函数被调用!') #通过输出信息以知道哪个函数被调用
3 return a+b #将a和b的求和结果返回
4 def NewSum(*args): #定义函数NewSum
5 print('NewSum函数被调用!') #通过输出信息以知道哪个函数被调用
6 s=0 #s用于保存求和结果,初始赋为0
7 for i in args: #i取传入的每一个参数值
8 s+=i #将i加到s上
9 return s #将保存求和结果的s返回
10 Sum=NewSum #将NewSum赋给Sum,后面再调用Sum函数,实际上就是执行NewSum函数
11 print(Sum(1,2,3,4,5)) #调用Sum函数(实际是执行NewSum)计算1至5的和并输出
程序执行完毕后,将在屏幕上输出如下结果:
NewSum函数被调用!
15
猴子补丁
56
Python是一个流行的开源项目,许多第三方开发者也将其开发的功能开放、供其他开发者在开源协议下免费使用。
第三方模块的获取与安装有多种方法,其中最推荐的一种方法是使用pip工具。
这里我们以用于科学计算的numpy模块的安装为例,介绍pip的使用方法。在安装numpy之前,可以先在Python环境中输入“import numpy”,此时会得到如下错误信息:
ModuleNotFoundError: No module named 'numpy'
第三方模块的获取与安装
57
下面我们打开系统控制台,并输入如下命令:
pip install numpy
在联网情况下,系统就会自动下载安装包并完成安装。
成功安装numpy模块后,再在Python环境中执行“import numpy”,则不会报错、可以正常导入。
第三方模块的获取与安装
Python函数编程
任务背景:
在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护。为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式。在Python中,一个.py文件就称之为一个模块(Module),模块大大提高了代码的可维护性。其次,编写代码不必从零开始。当一个模块编写完毕,就可以被其他地方引用。
任务01
读取路径下全部文件及文件夹名称
任务需求:
借助Pycharm,建立Python3项目,读取路径下全部文件及文件夹名称,包含子文件及子文件夹。
任务分析:
建立Python项目
读取路径下全部文件及文件夹名称,包含子文件及子文件夹
任务01
任务步骤:
借用Pycharm工具,建立Python3项目,读取路径下全部文件及文件夹名称,包含子文件及子文件夹。
任务结果:
读取路径下全部文件及文件夹名称
任务01
感谢观看
$$