收藏 分销(赏)

Python程序设计基础 Chap07 函数.pdf

上传人:曲**** 文档编号:231242 上传时间:2023-03-21 格式:PDF 页数:40 大小:1.62MB
下载 相关 举报
Python程序设计基础 Chap07 函数.pdf_第1页
第1页 / 共40页
Python程序设计基础 Chap07 函数.pdf_第2页
第2页 / 共40页
Python程序设计基础 Chap07 函数.pdf_第3页
第3页 / 共40页
Python程序设计基础 Chap07 函数.pdf_第4页
第4页 / 共40页
Python程序设计基础 Chap07 函数.pdf_第5页
第5页 / 共40页
点击查看更多>>
资源描述

1、内衮提纲7.1 什么是函教7.2 参数传遹7.3 参数的类型7.4 匿名函教7.5 变量作用域9。引例在消费者看来,牛经过加工后,就是可以食用的 罐头,至于工厂是如何将牛进行加工的,并不是 消费者所关心的事情对牛的处理过程,在消费者看来,就像一个黑盒,全然不知(2)我们已用到了许多Python提供的内置函数,比如print可按用户的要求进行输出,但我们不知 道,也不必知道它是如何控制输出的7.1什么是函数:函数是组织好的、可重复使用的、用来实现单一 或相关联功能的代码段。函数能提高应用的模块 性和代码的重复利用率。我们从前面的学习中已 经知道Python提供了许多内置函数,比如print。、o

2、rd()、len()等。7.1什么是函数总结说明以下几点。电在Python中,函数定义 的基本形式如下:(1)在Python中采用def关键字进 行函数的定义,不用指定返回值的 类型。def functionname(parametersl,parameters2.):松”函数说明文档字符串”function_body returnexpression/value(2)函数参数可以是零个、一个 或者多个,同样同样地地,函数 参数也不用指定参数类型,因为在 Python中变量都是弱类型的,Python会自动根据值来维护其类型,在函数定义中,这些参数一般称 作形式参数,简称形参。(3)return

3、语句是可选的,它可以在函数体内任何地方出现,表示函 数调用执行到此结束;如果没有 return语句,会自动返回None,如 果有return语句,但是retum后面没 有接表达式或者值的话也是返回 None。7.2参数传递:定义函数时,是可以有形式参数的,如果一个函 数定义了形式参数,在调用时,一般会用实际参 数(一般称为实参)与形参对应的方式调用,比 如求两个数相加的函数。一定义一个函数addTwo:一 def addTwo(x,y):_ print(x+y)-调用函数:一 addTwo(10,20)-30-在调用时,形参x对应实参10,形参y对应实参20。一般来 说,实参与形参会按书写的顺

4、序,进行一一对照地传递。7.3参数的类型 7.3.1必备参数必备参数须以正确的顺序传入函数。函数调用时实参 的数量必须和函数定义时形参的一样。比如调用前面定义的函数addTwo,要求必须传入两个 参数,不然会出现语法错误。例如:addTwo(1)Traceback(most recent call last):File Hn3 line 1,in addTwo(1)TypeError:addTwo()missing 1 required positional argument:y7.3参数的类型 7.3,2关键字参数 关键字参数和函数调用关系紧密,函数调用使用关键 字参数来确定传入的参数值。使

5、用关键字参数允许函 数调用时参数的顺序与声明时不一致,因为Python解 释器能够用参数名匹配参数值。定义函数printName,它有一个形参。def printName(s):“打印传入的字符串”print(s)调用函数时,声明传入变量的值,这与必备参数的实参传入不同 printName(s=huang,)Huang7.3参数的类型 7.3.3默认参数 在定义函数时,可以给某些形参设置默认值,这样,在调用函数时,默认参数的值如果没有传入,则被认 为是默认值。例如:在上面的printmessage函数定义时,可以设定score的默认 值为905 这样,如果实参调用时,score没有被传入,则会

6、输出 默认值。def printmessage(name,age,score=90.5):“输出姓名,年龄和分数”print(your Name is:,name)print(your Age is:,age)print(nyour score is:,score)return7.3参数的类型值得注意的是,在定义函数时,如果默认值不是赋给形参的最后一个 参数,系统会报错,比如上例,改成以下方式。def printmessage(nameJ age=20,score):“输出姓名,年龄和分数”print(your Name is:,name)print(nyour Age is:,age)pri

7、nt(your score is:“,score)return;SyntaxError:non-default argument follows default argument所以在使用默认参数时,按形参的从后往前的顺序依次设置,中间不 要间隔。比如以下形式是不行的。7.3参数的类型o 7.3.4不定长参数。在使用函数的过程中,有时可能需要一个函数能 处理比当初定义时更多的参数。这些参数叫作不 定长参数,与前面的几种方法不同,不定长参数 的函数在定义时,形参不会命名。:基本语法如下:def functionname(formal_args,*var):”函数说明文档字符串”function_

8、body return expression7.3参数的类型-加了星号(*)的变量名会存放所有未命名的变量参数。如下实例:-def printinfo(arg1,*var):-打印任何传入的参数”-print(输出:”)-print(arg1)-for v in var:-print(v)-return;-调用printinfo函数,首先只输入一个实参,结果如下:-printinfoChuang1)-输出:-Huang7.3参数的类型:再次调用printinfo函数,输入多个实参:printinfo(huang,Jguo,J1,2,3)输出:huang guo12 3在函数printinfo中

9、,*var就像一个容器,用来存放函数被调用时从实 参传入的值。这种方式比较灵活,可以让调用者不必在参数的个数和 顺序上花费精力和时间,但也有一定的局限,比如想要在函数内处理 某个具体的参数时,就没有前面的几种方式简洁。-r C 可7.4匿名函数:Python大小写字母Python使用lambda来创建匿名函数。lambda只是一个表达式,函数体比def简单很多。lambda的主体是一个表达式,而不是一个代码块。仅仅能在lambda表达式中封装有限的逻辑进去 lambda缩进错误函数拥有自己的命名空间,且不能访问自有参 数列表之外或全局命名空间里的参数。lambda函数的语法只包含一个语句,如下

10、全书要统-下,不要有时候使用句号,有时候使用冒号:lambda 3arg2,argn:expression argn:可选,如果提供,通常是逗号分隔的变量表达式形式,即 位置参数。expression:不能包含分支或循环(但允许条件表达式),也不 能包含return(或yield)函数。如果为元组,则应用圆括号将其包 含起来。r7.4匿名函数下面是一个用lambda函数求两数之和的例子。sum=lambda arg1,arg2:arg1+arg2;sum(12,13)25:下面的例子加了条件语句,根据参数是否为1决定s为yes 还是no s=lambda x:”yes”if x=1 else

11、no s(0)no s(1)yes,7.5变量作用域:一个程序所有的变量并不是在哪个位置都可以访 问的。访问权限取决取决于于这个变量是在哪里 赋值的。变量的作用域决定了在哪一部分程序你 可以访问哪个特定的变量名称。两种最基本的变 量作用域为全局变量和局部变量。:定义在函数内部的变量拥有一个局部作用域,定 义在函数外的拥有全局作用域。调用函数时,所 有在函数内声明的变量名称都将被加入到作用域 中。:局部变量只能在其被声明的函数内部访问,而不能在函数 外被访问,看下面的例子。新建文件hsLpy,代码如下:def fun():x=10#函数内的局部变量xprint(x)#x是局部变量,不能在函数fu

12、n外被访问:程序运行时,系统报错:=RESTART:C:/Python34/hs1.py=Traceback(most recent call last):File nC:/Python34/hs1.pyH,line 3,in print(x)NameError:name x is not defined7.5变量作用域有一种情况要注意的是,当一个变量既在函数外有声明,又在函数内部有声 明时,要分清楚,可以把它们当成两个不同的变量来处理。如下例。建立文件hs4.py:1.total=0;#这是一个全局变量 2.def sum(x,y):3.#返回2个参数的和J 4.total=x+y#tota

13、l在这里是局部变量.5.print(函数内是局部变量total:,total)6.return total;7.sum(20,30);#调用sum函数 8.print(函数外是全局变量total:,total)程序执行结果为:=RESTART:C:/Python34/hs4.py=函数内是局部变量total:50函数外是全局变量total:07.5变量作用域导函数内的变量total和函数外的变量total,尽管变 量名一样,但也可以当作不同的变量来理解。:下面这种情况,是大家在写代码时容易出错的,如下。:7.x=10 2.def fun():3.x=x+10 4.print(x):.5.fun

14、():执行后,系统报错:.Python中的函数,无论是命名函数,还是匿名函 数,都是语句和表达式的集合。在Python中,函 数是第一个类对象,这意味着函数的用法并没有 限制。Python函数的使用方式就像Python中其他 值一样。Python函数拥有一些属性,通过使用 Python内置函数dir就能查看这些属性。:先定义一个简单的函数add,代码如下:1.def add(x,y=10):2.输出两数相加的和 add :这个输出表示的是函数add的内存地址。7,6函数的属性一些重要的函数属性包括以下几个。(1)_doc_返回指定函数的文档字符串。add._doc_:输出两数相加的和(2)_n

15、ame_返回函数名字。add._name add(3)module返1函数定义所在模块的名字。*add._module main_(4)func_defaidts返回一个包含默认参数值的元组。add._defaults_*(10,)孝(5)func_globals返回一个包含函数全局变量的字典引用。add._globals_在多数语言中,main是程序执行的起点,Python中也有 类似的运行机制,但方式却截然不同:Python使用缩进 对齐组织代码的执行,所有没有缩进的代码(非函数定义 和类定义),都会在载入时自动执行,这些代码,可以认 为是Python的main函数。每个文件(模块)都可以

16、任意 写一些没有缩进的代码,并且在载入时自动执行,为了区 分主执行文件还是被调用的文件,Python引入了一个变 量_name_,它是函数的一个属性,当文件是被调用时,name_的值为模块名,当文件被执行时,name为,main)这个特性,为测试驱动开发提 供了极好的支持,可以在每个模块中写上测试代码,这些 测试代码仅当模块被Python直接执行时才会运行。def tellMe():#print(i am tellMe)领先的智慧教育云 服务提供商Wisdom Education CloudII IImain:7.7 Python中的main函2.3.4.5.6.7.8.9.if namepr

17、int(i am main()tellMe()print。*,)def fun():tellMe()fun()程序输出结果为:=RESTART:C:/Python34/hs7.py=i am main()i am tellMe*i am tellMe(1)Python代码的执行不依赖于main函数。(2)Python代码从没有缩进的代码开始执行。:*zip是Python的一个内置函数,它接受一系列可迭 代的对象作为参数,将对象中对应的元素打包成 一个个tuple(元组),然后返回由这些tuple组成 的list(列表)。其应用形式为:zip(iterable5.)o若传入参数的长度不等,则返回

18、list的长度和参 数中长度最短的对象相同。利用*号操作符,可以 将list unzip(解压)o:下面介绍关于zip函数的简单应用方式。x=zip():print(list(x)运行的结果是::口从这个结果可以看出zip函数在没有参数时运作的方式。x=1323 3 x=zip(x)print(list(x)运行的结果是:(1,),(2,),(3,)从这个结果可以看出zip函数在只有一个参数时运作的方式。下面看看有多个参数的情况::1.x=132,3:2.y=4,5,6 3,xy=zip(x,y)4.for i in xy:5.print(i,end=)输出结果为:(1,4)(2,5)(3,6

19、)可见,zip函数可以将几个列表中的元素,按次序组合成一个元组。:如果将多个列表传入到zip函数中,也可以执行相同的操作,如1.x=1,2332.y=4,5,63.z=7,8,9 4.xyz=zip(x,y,z)5.print(list(xyz)输出xyz的值如下:(1,4,7),(2,5,8),(3,6,9)当两个列表的长度不一样时,操作如下:1.x=1,2J32.y=4,5,6,73.xy=zip(x5 y)4.print(list(xy)运行的结果是:(1,4),(2,5),(3,6)从这个结果可以看出zip函数的长度处理方式。7.9常见内置函数一 7.9.1与数学相关的函数下面列举一些

20、与数学运算相关的函数:abs(a):求取绝对值。用法如下:abs(-2)输出结果为:2 max(list):求取list最大值。用法如下:max(254,859)输出结果为:9 min(2,489):输出结果为:2N领先的智慧教育云辕服务提供商“QlJ Wisdom Education Cloud7.9常见内置函数7.9.2类型转换函数类型转换函数是将一种类型的变量强行转化为另一种类型的变量,常见转换 函数如下。int(str):转换为int型。int(12)12 float(int/str):将int型或字符型转换为浮点型。float(21)21.0 str(int):转换为字符型。str(

21、10)10 bool(int):转换为布尔类型,0转化为False,非0转化为True bool(0)False bool(1)%TruA领先的智慧教育云g冬端服务提供商小口 干Wisdom Education Cloud7.9常见内置函数F 7.9.3相关操作函数以下是一些相关操作函数的用法。eval():执行一个表达式,或字符串作为运算。eval(1+1)2 exec():执行Python语句。exec(print(Python),)Python filter(func,iterable):通过判断函数fun,筛选符合条件的元素。filter(lambda x:x3,1,2,3,4,5,6

22、)map(func,*iterable):将func用于每个让erable对象。7.10函数的应用举例【例7-1】写一个函数,将一个列表进行反转,就是进行倒序输出。分析:在前面常见的函数里,有一个函数reversed可以将一个序列进 行反转。现在,要求大家动手自己写一个功能类似的函数。建立文件hs8.py,代码如下:1.:2.:3.:4.5.6.7.8.9.10.11.def reverse(li):#定义函数reverse将一个系歹Uli进行反转皿for i in range(0,len(li)/2):temp=liilii=li-i-1li-i-1=tempprint(反转前的序列为:”)

23、I=1,2,3,4,5#新建列表Iprint(l)reverse(l)#调用reverse函数Drint(反转后的序列为:”)偏丽I领先的智慧教育云g冬赣服务提供商中口 Wisdom Education Cloud7.10函数的应用举例【例7-2】写函数,计算传入字符串中的数字、字母、空格和其他字符的个数。建立文件hsIO.py,代码如下:1.def fun(x)::2.digit_number=0 3.space_number=0 4.alpha_number=0 5.else_number=06.for i in x:7.if i.isdigitQ:#检查字符串是否只由数字组成 8.dig

24、it_number+=1 9.elif i.isspace():#检查字符串是否只由空格组成10.space_number+=111.elif i.isalphaQ:#检查字符串是否只由字母组成 12.alpha_number+=1 13.else:14.else_number+=115.print(数字个数:”,dighnumber)16.print(空格个数:”,space_number)领先的智慧教育云服务提供商Wisdom Education Cloud7J0函数的应用举例【例7-3】写一个函数,检查传入的对象(字符串、列表、元组)的每一个元素是否含 有空内容,如传入了空的字符串、空的

25、列表或元组。1.def fun(p,q,i):2.if p=3.print(字符串有)4.if q=:5.print。列表有)6.if i=():7.print(元组有。8.r=fun(python3.4,10,22,()领先的智慧教育云服务提供商Wisdom Education Cloud7.10函数的应用举例【例7-4】写一个函数,获取传入列表或元组对象的所有奇数位索引对应的元素,并将 其作为新的列表进行返回。建立文件hs13.py,代码如下:1.2.3.4.5.6.7.8.9.10.def fun(p,q):result=for i in range(len(p):if i%2=1:re

26、sult.append(pi)for j in range(len(q):ifj%2=1:result.append(qj)print(result)r=fun(1,2,3,(11,22,33)领先的智慧教育云服务提供商Wisdom Education Cloud7.10函数的应用举例【例7-5】编写一个程序,打印如下图形:要求,图形的行数可以是任意的整数。*分析:首先要找到这个图形的规律,假设有i行,则每行”的个数为2*i-1个,再一点 就是要找出每行前面的空格数量,我们先假定总共有line行,并且最后一行前面是没有 空格的,那么,倒数第二行就会空一格,倒数第三行会空两格,依此类推,则可知每

27、 行的空格数就为:line-i,考虑互range函数的特性,是从。到line-1,因此每行空格的个 数为line-i-1。按以上思路,可写如下程序:1.2.3.4.def printPyram(line):for i in range(line):print(*(line-i-1)+printPyram(5),*(2*i+1)本章小结:本章讲述了创建函数的所有基础知识与技术,包 括函数的定义方式,函数的形参和实参的概念及 形参的类型、变量的作用域等,并介绍main函数 及一些常用函数。通过多个实例使大家进一步熟 悉函数的定义与应用,并能将这些函数灵活应用 到日常工作与学习中,从而提高工作效率。

展开阅读全文
相似文档                                   自信AI助手自信AI助手
猜你喜欢                                   自信AI导航自信AI导航
搜索标签

当前位置:首页 > 应用文书 > 其他

移动网页_全站_页脚广告1

关于我们      便捷服务       自信AI       AI导航        获赠5币

©2010-2024 宁波自信网络信息技术有限公司  版权所有

客服电话:4008-655-100  投诉/维权电话:4009-655-100

gongan.png浙公网安备33021202000488号   

icp.png浙ICP备2021020529号-1  |  浙B2-20240490  

关注我们 :gzh.png    weibo.png    LOFTER.png 

客服