人工智能导论 课件 11.6 模块化编程_第1页
人工智能导论 课件 11.6 模块化编程_第2页
人工智能导论 课件 11.6 模块化编程_第3页
人工智能导论 课件 11.6 模块化编程_第4页
人工智能导论 课件 11.6 模块化编程_第5页
已阅读5页,还剩52页未读, 继续免费阅读

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

模块化编程通识课-《人工智能通识》123函数模块第三方库章节名思考2Python语言如何减少程序的代码量,提高程序的执行效率和可维护性呢?概述3

在Python中,程序主要由包、模块以及函数构成,其中包由一系列的模块构成,模块由一系列类和函数构成。11.6模块化编程一、函数函数5

在Python中,函数是组织好的、可重复使用的,用来实现单一或相关联功能的代码段。因此,函数在程序中被用于分离不同的任务,并为代码复用提供一个通用的机制。使用函数不仅可以实现结构化程序设计,减少代码的复杂度,提高代码的质量,而且能够将大项目分割成不同的子模块,从而便于团队协作开发。Python语言中的函数6内建函数Python语言提供的系统函数,在程序编写中可以直接使用,比如之前用到的print()、input()等。库函数Python拥有丰富的标准库以及第三方库,这些库提供了各种功能,使得开发人员能够更轻松地处理各种任务。用户自定义函数用户可以在程序中自己创建函数,并实现指定功能。用户自定义的函数71、函数定义在Python语言中,用户可以自定义一个指定功能的函数,其语法格式如下所示:def函数名(参数):

函数体

(return表达式/值)用户自定义的函数8注意:①Python语言采用def进行函数定义,不用指定返回值类型。②函数参数可以为0个、1个或者多个。③return语句是可选的,当函数中有return语句时,表明该函数返回相应内容并到此结束,当没有return语句时,表明该函数返回空值。用户自定义的函数9例1:定义一个求两数之和的函数defadd(a,b): #add为函数名,a和b为参数

returna+b #返回值例2:定义一个求列表中值最大的元素的函数defmax_item(mylist):returnmax(mylist)#max返回mylist中最大的值用户自定义的函数102、函数调用用户定义完函数之后,函数是不会自动执行的,这一点和其他语言类似,要使得代码可以执行,需要调用函数。其语法格式如下所示:函数名(参数)同样,这里的参数个数由该函数定义时的参数个数决定,可以为0个、1个或者多个。用户自定义的函数11可以通过如下代码来进行调用刚才定义的函数:list_example=[2,5,6,8,4] #创建一个列表max_value=max_item(list_example) #调用函数并把返回结果

赋给变量print(max_value)用户自定义的函数123、参数

形参即形式参数,实参即实际参数。形参是在定义函数名和函数体的时候使用的参数,目的是用来接收调用该函数时传递的参数;而实参是在进行函数调用时,把值传送给形参,因此应预先用赋值、输入等办法使实参获得确定值。

在Python中,def关键字定义函数时函数名后面的括号中的变量称为形参,而调用该函数所提供的值或变量称为实参。用户自定义的函数13定义一个含有两个参数的函数,用于返回这两个数的最大值: defget_max(a,b): #a、b为形参

ifa>=b: returna else: returnb用户自定义的函数14可以通过下列代码来调用该函数: max_value=get_max(1,2)#1、2为实参 print(max_value)

x=3 y=4 max_value=get_max(x,y) #x、y为实参 print(max_value)用户自定义的函数15可以通过下列代码来调用该函数: max_value=get_max(1,2)#1、2为实参 print(max_value)

x=3 y=4 max_value=get_max(x,y) #x、y为实参 print(max_value)用户自定义的函数16定义函数时,可以给函数的参数设置默认值,这个参数称为默认参数。在调用函数时,如果没有给该参数设定值,则该函数直接使用默认值;如果给该参数设定了值,则使用设定的新值。例:定义一个函数,实现输出学生的年龄和性别,如果未设置该学生的性别,默认其性别为“男”defprint_stu(age,sex="男"): #设置sex参数默认值为“男”

print("sex:",sex)print("age:",age)用户自定义的函数17分别通过如下默认参数形式和指定参数形式来调用它:print_stu(20)print_stu(18,"女")sex:男age:20sex:女age:18用户自定义的函数18注意:

在定义函数时,带有默认值的参数一定要位于参数列表最后,否则程序会报错。用户自定义的函数194、函数的返回值函数的“返回值”指的是当该函数完成特定功能之后,最后给调用者的一个结果。通常函数根据不同的参数会返回不同的结果。如果函数没有具体返回结果,表明函数执行的功能不需要返回给调用者具体的内容。print_stu()函数只是根据参数打印不同的结果,就不需要返回具体的值。add(a,b)函数实现了计算a和b这个数字和的功能,需要返回给调用者继续参与后续的计算中。用户自定义的函数20例:判断一个整数是否为素数,若为素数返回True;反之返回Falseimportmath #导入math模块defis_prime(n): #定义函数

ifn<2:returnFalseelse:lenth=int(math.sqrt(n))foriinrange(2,lenth+1): #判断2~lenth+1之间有没有n的因子

用户自定义的函数21 ifn%i==0:returnFalsei=i+1returnTrue调用该函数来验证上述程序:result=is_prime(193)print(result)运行结果为True用户自定义的函数22Python函数的返回值不仅可以返回单个值,而且可以通过列表、元组等方式返回多个值。例:随机生成1~100之间的10个整数并返回importrandom #导入random模块defrandom_list():mylist=[]foriinrange(0,10):用户自定义的函数23rint=random.randint(1,100)#生成1~100之间的随机整数

mylist.append(rint) #添加到列表中

returnmylist通过random_list()调用该函数:mylist1=random_list() 运行结果如下:print(mylist1) [9,27,12,22,22,100,78,14,30,86]mylist2=random_list() 90,98,4,43,59,23,69,79,61,97]print(mylist2)用户自定义的函数245、作用域

变量声明的位置不同,其被访问的范围也随之不同,即变量的作用域不同。一个程序的所有变量并不是在哪个位置都可以访问的,访问权限决定于这个变量赋值的位置。变量按照其作用域的不同主要分为全局变量和局部变量。在一个Python程序中,在函数和类定义之外声明的变量称为全局变量。全局变量的作用域为其定义的模块。

定义在函数内部的变量称为局部变量。局部变量只有在此函数内有效,也就是说在此函数内才能使用它们,在此函数外的所有地方都不能使用它们。用户自定义的函数25例:全局变量和局部变量不同作用域x=5defchange_value(): x=2 print(x)

change_value()print(x)运行结果如下:2511.6模块化编程二、模块概述27Python模块(Module),是一个Python文件,以.py结尾,包含了Python对象定义和Python语句。模块能够有逻辑地组织Python代码段。把相关的代码分配到一个模块里能让代码更好用,更易懂。模块能定义函数,类和变量,模块里也能包含可执行的代码。模块的定义28创建一个文件support.py,内容如下:defprint_func(par): print("Hello:",par) return模块的引入29模块定义好后,可以使用import语句来引入模块,语法如下:importmodule1[,module2[,...moduleN]]比如要引用模块math,就可以在文件最开始的地方用importmath来引入。在调用math模块中的函数时,必须这样引用:模块名.函数名当解释器遇到import语句,如果模块在当前的搜索路径就会被导入。搜索路径是一个解释器会先进行搜索的所有目录的列表。如想要导入模块support.py,需要把命令放在脚本的顶端:模块的引入30test.py文件代码:#!/usr/bin/Python#-*-coding:UTF-8-*- 运行结果如下:#导入模块 Hello:Runoobimportsupport#现在可以调用模块里包含的函数了support.print_func("Runoob")模块的引入31一个模块只会被导入一次,不管执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。Python的from语句从模块中导入一个指定的部分到当前命名空间中。语法如下:frommodnameimportname1[,name2[,...nameN]]例如,要导入模块fib的fibonacci函数,使用如下语句:fromfibimportfibonacci模块的引入32把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:frommodnameimport*这提供了一个简单的方法来导入一个模块中的所有项目。然而这种声明不该被过多地使用。例如想一次性引入math模块中所有的东西,语句如下:frommathimport*标准库模块33

Python提供了很多标准库,提升程序开发的效率。标准库不需要安装,只需要导入。比如,常用的math模块和time模块。math是Python中用来处理常见的数学计算。Time模块用于格式化时间,有很多函数可以转换常见日期格式,具体方法如表11-14所示。标准库模块34标准库模块35Python程序能用很多方式处理日期和时间,转换日期格式是一个常见的功能。Python提供了一个time和calendar模块可以用于格式化日期和时间。时间间隔是以秒为单位的浮点小数。每个时间戳都以自从1970年1月1日午夜(历元)经过了多长时间来表示。Python的time模块下有很多函数可以转换常见日期格式。如函数time.time()用于获取当前时间戳,代码示例:标准库模块36importtime#引入time模块

ticks=time.time()print("当前时间戳为:",ticks)运行结果如下:当前时间戳为:1687940482.375693811.6模块化编程三、第三方库概述38Python语言有超过12万个第三方库,覆盖信息技术几乎所有领域。比如网络爬虫、自动化、数据分析与可视化、WEB开发、机器学习和其他常用的一些第三方库。数据科学和数学库: NumPy:提供高性能的多维数组和矩阵操作。 Pandas:提供数据分析和处理工具,包括DataFrame等数据结构。 SciPy:用于科学计算的库,包含许多模块,如统计、优化等。概述39机器学习和人工智能: Scikit-learn:机器学习库,提供各种分类、回归、聚类等算法。 TensorFlow:由Google开发的深度学习框架,用于构建和训练神经网络。 PyTorch:由Facebook开发的深度学习库,以动态计算图为特点。概述40网络通信: Requests:用于发起HTTP请求的库。 Socket:提供套接字编程的基础功能,用于网络通信。图像处理: OpenCV:计算机视觉库,用于图像和视频处理。第三方库安装41第三方库是需要先安装之后才可以导入使用。以anaconda为例,首先通过开始菜单找到anaconda,打开AnacondaPrompt,输入以下命令安装。condainstall库名 Anaconda是集成环境,Numpy,Matplotlib部分常用第三方库已经包含在内,重新安装会提示库已经安装,如图11-21所示。第三方库安装42图11-21命令行第三方库安装(字体)第三方库的使用43首先要引入第三方库,然后利用第三方库的函数实现相应的功能。下面例子利用numpy和matplotlib库生成机器学习算法线性回归所需要的训练数据并可视化展示出来。#引入numpy库,并命名为npimportnumpyasnp#引入matplotlib的pyplot并命名为pltimportmatplotlib.pyplotasplt#利用numpy的arange方法生成100个0-99的连续数据第三方库的使用44X=np.arange(100)#利用numpy的生成符合正态分布的随机数noise=np.random.normal(0,6,100)y=0.5*X+noiseprint(X)#利用matplotlib库生成散点图plt.scatter(X,y)#利用matplotlib库生成折线图plt.plot(X,0.5*X,c='b')#显示plt.show()第三方库的使用45输出结果如下:X:[0123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899]第三方库的使用46第三方库的使用47在上个例子的基础上加入机器学习最简单的线性回归模型,回归模型利用第三方库Scikit-learn中的LinearRegression模型,对生成的数据进行训练,并拟合出线性方程的代码示例:#引入numpy库,并命名为npimportnumpyasnp#引入matplotlib的pyplot并命名为pltimportmatplotlib.pyplotasplt#引入机器学习库中的线性模型线性回归fromsklearn.linear_modelimportLinearRegression第三方库的使用48#利用numpy的arange方法生成100个0-99的连续数据X=np.arange(100)#利用numpy的生成符合正态分布的随机数noise=np.random.normal(0,6,100)y=0.5*X+noise#实例化线性回归模型并利用随机数据训练LR=LinearRegression()LR.fit(X.reshape(-1,1),y)第三方库的使用49#查看回归系数print(LR.coef_)print(X)#利用matplotlib库生成散点图plt.scatter(X,y)#原始数据斜率,蓝色折线plt.plot(X,0.5*X,c='b’)#利用线性回归拟合的斜率,红色折线plt.plot(X,LR.coef_*X,c='r')#显示plt.show()第三方库的使用50运行结果如下:[012345678910111213141516171819202122232425262728293031323334353637383940414243444546

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论