版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
第5章
函数和模块《Python数据分析与应用》①程序结构清晰,可读性好。②减少重复编码的工作量。③可多人共同编制一个大程序,缩短程序设计周期,提高程序设计和调试的效率。使用函数的好处1概述
函数是一组实现某一特定功能的语句集合,是可以重复调用、功能相对独立完整的程序段。函数的定义与调用定义一般形式:def
函数名([形式参数表]):函数体
[return表达式]采用def关键字定义函数,不需要指定返回值的类型;函数的参数不限,不需要指定参数类型;参数括号后面的冒号“:”必不可少;函数体相对于def关键字必须保持一定的空格缩进;return语句是可选的;允许定义函数体为空的函数。函数定义时要注意一般形式:函数名([实际参数表])函数的调用说明实参可以是常量、变量、表达式、函数等,但在进行函数调用时必须有确定的值。函数的实参和形参应在个数、类型和顺序上一一对应。对于无参函数,调用时实参表列为空,但()不能省。例:编写函数,求3个数中的最大值。defgetMax(a,b,c):ifa>b:max=aelse:max=bif(c>max):max=creturnmaxa,b,c=eval(input("inputa,b,c:"))n=getMax(a,b,c)print("max=",n)在Python中不允许前向引用,即在函数定义之前,不允许调用该函数。函数的参数和函数的返回值形式参数:定义函数时函数名后面括号中的变量名实际参数:调用函数时函数名后面括号中对应的参数说明实参可以是常量、变量和表达式,但必须在函数调用之间有确定的值。形参与实参个数相同形参定义时编译系统并不为其分配存储空间,也无初值;只有在函数调用时,临时分配存储空间,接受来自实参的值;函数调用结束,内存空间释放。参数传递方式单向的值传递实参和形参之间是单向的值传递。在函数调用时,将各实参表达式的值计算出来,赋给形参变量。因此,实参与形参必须类型相同或赋值兼容,个数相等,一一对应。在函数调用中,即使实参为变量,形参值的改变也不会改变实参变量的值。实参和形参占用不同的内存单元传地址方式
函数调用时,将实参数据的存储地址作为参数传递给形参defswap(a,b):a,b=b,aprint("a=",a,"b=",b)x,y=eval(input("inputx,y:"))swap(x,y)print("x=",x,"y=",y)运行结果:inputx,y:3,5a=5b=3x=3y=5形式参数(形参)实际参数(实参)例如:编一程序,将主函数中的两个变量的值传递给swap函数中的两个形参,交换两个形参的值。单向值传递defswap(a_list):a_list[0],a_list[1]=a_list[1],a_list[0]print("a_list[0]=",a_list[0],"a_list[1]=",a_list[1])x_list=[3,5]swap(x_list)print("x_list[0]=",x_list[0],"x_list[1]=",x_list[1])运行结果:a_list[0]=5a_list[1]=3x_list[0]=5x_list[1]=3例:传地址方式。函数的返回值
指函数被调用、执行完后,返回给主调函数的值。函数的返回语句一般形式
return表达式功能:
使程序控制从被调用函数返回到调用函数中,同时把返回值带给调用函数defadd(a,b):c=a+b
x=add(3,20)print(x)说明
函数内可有多条返回语句。如果没有return语句,会自动返回NONE;如果有return语句,但是return后面没有表达式也返回NONE。例:编写函数,判断一个数是否是素数。defisprime(n):foriinrange(2,n):if(n%i==0):return0return1m=int(input("请输入一个整数:"))flag=isprime(m)if(flag==1):print("%d是素数"%m)else:print("%d不是素数"%m)参数分类必备参数默认参数关键参数不定长参数必备参数必备参数是指调用函数时,参数的个数,参数的数据类型,以及参数的输入顺序必须正确,否则会出现语法错误。>>>defprintme(str):
print(str)
return>>>printme()Traceback(mostrecentcalllast):File"<pyshell#40>",line1,in<module>printme()TypeError:printme()missing1requiredpositionalargument:'str'默认参数
默认参数是指允许函数参数有缺省值,如果调用函数时不给参数传值,参数将获得缺省值。Python通过在函数定义的形参名后加上赋值运算符(=)和默认值,给形参指定默认参数值。注意:默认参数值是一个不可变的参数。defsay(message,times=1):
printmessage*times
#调用函数
say('Hello')#默认参数times为1
say('World',5)【程序运行如下所示】HelloWorldWorldWorldWorldWorld关键参数
函数的多个参数值一般默认从左到右依次传入。Python也可以通过关键参数用于改变赋值顺序,关键参数又称命名参数。deffunc(a,b=5,c=10): print('ais',a,'andbis',b,'andcis',c)#调用函数func(3,5)func(25,c=24)func(c=50,a=100)【程序运行如下所示】ais3andbis5andcis10ais25andbis5andcis24ais100andbis5andcis50不定长参数
不定长参数又称可变长参数,若参数以一个*号开头的代表着一个任意长度的元组,可以接收连续一串参数。参数以两个*号开头的代表着一个字典,参数的形式是“key=value”,接受连续任意多个参数。deffoo(x,*y,**z): print(x) print(y) print(z)输入foo(1)输入foo(1,2,3,4)输入foo(1,2,3,a="a",b="b")匿名函数匿名函数是指不使用def语句定义一个函数。python使用lambda来创建匿名函数。lambda只是一个表达式,而不是一个代码块,比def简单很多。lambda函数的形式如下: lambda[arg1[,arg2,.....argn]]:expression【例】lambda函数举例sum=lambdaarg1,arg2:arg1+arg2;#调用sum函数print("相加后的值为:",sum(10,20))【程序运行如下所示】相加后的值为:30函数的递归调用
在函数的执行过程中又直接或间接调用该函数本身
直接递归调用
在函数中直接调用函数本身间接递归调用
在函数中调用其它函数,其它函数又调用原函数f()调f调f2调f1f1()f2()defa(x):……
z=b(y)…….return(2*z)defb(t):……
m=a(x)…….return(3+c)deff(x):……
z=f(y)…….return(2*z)递归算法的两个基本特征递推归纳将问题转化为比原问题小的同类规模,归纳出一般递推公式.
故所处理的对象要有规律地递增或递减递归终止当规模小到一定的程度应该结束递归调用,逐层返回常用条件语句来控制何时结束递归13十二月2024例求递归方法求n的阶乘递推归纳:递归终止:deffac(n):ifn==0:f=1else:f=fac(n-1)*n;returnfn=int(input("pleaseinputn:"))f=fac(n)print("%d!=%d"%(n,f))总结执行过程(两个阶段)第一阶段:逐层调用,调用函数自身第二阶段:逐层返回,返回到调用该层的位置递归调用是多重嵌套调用的一种特殊情况调用的深度:调用的层数
前提:原问题可以层层分解为类似的子问题,且子问题比原问题规模更小规模最小的问题具有直接解方法:寻找分解方法:将原问题转化为子问题求解,例:n!=n*(n-1)!设计递归出口:根据规模最小的子问题确定递归终止条件,例:求解n!,当n=0时,n!=1;设计递归算法的方法13十二月2024例:汉诺塔问题。设有三座塔座(A、B、C),在一个塔座(设为A)上有64个盘片,盘片不等,按大盘在下,小盘在上的顺序依次叠放。现要将A塔上的盘片借助于B塔,移到C塔上并保持同样顺序叠排,移动盘片时必须遵守以下规则:(1)每次只能移动一个圆盘;(2)圆盘可以插在A、B、C任意一个塔座上;(3)任何时候都不能将一个较大的圆盘放到较小的圆盘之上。13十二月2024
将A塔上的红、黄两盘移动到B上蓝盘放到C上将红、黄两盘从B移动到C盘上。(完成)ABC问题分析:(1)n=1时,直接将其从A->C;(2)n>1时,只要先将前n-1个借助C从A->B,那么可以把第n个直接从A->C;(3)如何将剩下的n-1个圆盘遵守规则借助A从B->C,问题性质同(2);问题性质相同,因此适合采用递归过程!若将n个盘片按规定从A塔移至C塔,移动步骤可分为三步:把A塔上的n-1个盘片借助C移动到B塔把第n个盘片从A塔移至C塔把B塔上的n-1个盘片借助A塔移至C塔算法用函数hanoi(n,x,y,z)以递归算法实现13十二月2024盘片数源塔借用塔目标塔
递归终止:当递归调用到盘片数为1时算法描述:1)递归调用hanoi(n-1,a,c,b)2)将n号盘片从a塔移动到c塔3)递归调用hanoi(n-1,b,a,c)count=0defhanoi(n,x,y,z):globalcountifn==1:count+=1move(count,x,z)else:hanoi(n-1,x,z,y);
count+=1move(count,x,z)hanoi(n-1,y,x,z);
defmove(n,x,y):print("step%d:Movediskform%cto%c"%(count,x,y))m=int(input("Inputthenumberofdisks:"))print("Thestepstomoving%ddisks:"%m)hanoi(m,'A','B','C')模块
将一些常用的功能单独放置到一个文件中,方便其他文件来调用,这些文件即为模块。
模块分为如下:
标准库模块
用户自定义模块导入模块导入模块就是给出一个访问模块提供的函数、对象和类的方法。(1)引入模块
import模块(2)引入模块中的函数
from模块名import函数名(3)引入模块中的所有函数from模块名import*第6章Python网络爬虫《Python数据分析与应用》网络爬虫网络爬虫(WebSpider),又被称为网页蜘蛛或网络机器人,通过一定的规则自动地抓取网络信息。网络爬虫就是根据网址获取网页信息。例如,当输入网址:/,浏览器向DNS服务器发出请求,经过解析,将发送给浏览器的HTML、JS、CSS等文件解析出来,便成了百度内容。爬虫流程爬取
Python提供了requests等库实现HTTP请求操作,获取网页的源代码。
Requests
方法解释requests.get()获取html的主要方法requests.head()获取html头部信息的主要方法requests.post()向html网页提交post请求的方法requests.put()向html网页提交put请求的方法requests.patch()向html提交局部修改的请求requests.delete()向html提交删除请求Requests
importrequestsr=requests.get(url='http://www……')#GET请求print(r.status_code)#获取返回状态print(r.url)print(r.text)#打印解码后的返回数据解析从网页源代码中提取有用的信息。方法1:采用正则表达式提取,但是在构造正则表达式时比较复杂且容易出错。方法2:由于网页的结构有一定的规则,可以利用BeautifulSoup、pyquery、lxml等库提取网页节点属性、CSS选择器等网页信息。
存储将提取到的数据保存到某处以便后续处理和分析,可以保存为TXT文本或JSON文本,也可以保存到MySQL和MongoDB等数据库。正则表达式
正则表达式,又称正规表示法、常规表示法,是指通过事先定义好的特定字符(“元字符”)组成的“规则字符串”,对字符串进行过滤逻辑。凡是符合规则的字符串,认为“匹配”,否则,不“匹配”。
正则表达式
采用正则表达式判断一个字符串是否包含合法的Email,需要创建一个匹配Email的正则表达式,然后通过该正则表达式去判断。正则表达式元字符含义输入输出.匹配任意字符
a.cAbc^匹配开始位置^abcAbc$匹配结束位置abc$Abc*
匹配前一个元字符0到多次abc*ab;abccc+匹配前一个元字符1到多次abc+abc;abccc?匹配前一个元字符0到1次abc?ab;abcre模块fIndall()compile()match()search()replace()split()Python中的re模块提供了一个正则表达式引擎接口,允许将正则表达式编译成模式对象,通过这些模式对象执行模式匹配搜索和字符串分割、子串替换等操作。Findall()>>>importre>>>p=pile(r'\d+')>>>print(p.findall('o1n2m3k4'))['1','2','3','4']search()>>>importre>>>a="123abc456">>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(0))123abc456>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(1))123>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(2))abc>>>print(re.search("([0-9]*)([a-z]*)([0-9]*)",a).group(3))456Match()>>>importre>>>print(re.match('www','').span())#在起始位置匹配(0,3)>>>print(re.match('com',''))#不在起始位置匹配Nonesplit()1)只传一个参数,默认分割整个字符串>>>str="a,b,c,d,e";>>>str.split(',');["a","b","c","d","e"]split()2)传入两个参数,返回限定长度的字符串>>>str="a,b,c,d,e";>>>str.split(',',3);["a","b","c"]
split()3)使用正则表达式匹配,返回分割的字符串>>>str="aa44bb55cc66dd";>>>print(re.split('\d+',str))["aa","bb","cc","dd"]BeautifulSouplxml作为BeautifulSoup库解析器BeautifulSoup
BeautifulSoup将HTML文档转换成一个复杂的树形结构,每个节点都是Python对象BeautifulSoupfromurllib.requestimporturlopenfrombs4importBeautifulSoup#导入BeautifulSoup对象html=urlopen('/new100.html')#打开url,获取html内容bs_obj=BeautifulSoup(html.read()
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 编辑部第二学期工作计划
- 财务会计工作总结与计划范文
- 护士入职面试自我介绍新入职护士培训计划
- 服务中心个人某年度工作计划
- 2024-2024年第二学期小学安全工作计划范文
- 工作计划结尾例文
- 学校远程教育工作计划范文
- 公司班组建设工作计划
- 2024六年级上学期班务工作计划
- 农村法律顾问个人工作计划
- 单片机技术智慧树知到期末考试答案章节答案2024年武汉科技大学
- 《公路桥梁施工监控技术规程》(JTGT3650-01-2022)
- 高空蜘蛛人施工专项施工方案
- 生物甲烷行业竞争分析及发展前景预测报告
- 体育赛事后勤服务行业发展趋势及前景展望分析报告
- 新华锦2023年投资性房地产评估报告
- 大连市金普新区2022-2023学年七年级上学期期末数学试题【带答案】
- 2024年美国户外露营装备市场现状及上下游分析报告
- 2024年大学试题(财经商贸)-博弈论笔试考试历年高频考点试题摘选含答案
- 《液压与气压传动》课程期末考试题库及答案(A卷)
- 软件项目投标技术方案(技术方案)
评论
0/150
提交评论