《[精选]python函数和函数传参ppt》由会员分享,可在线阅读,更多相关《[精选]python函数和函数传参ppt(42页珍藏版)》请在金锄头文库上搜索。
1、函数和函数传参,李凯,函数的定义,微实例:生日歌。 过生日时要为朋友唱生日歌,歌词为: Happy birthday to you! Happy birthday to you! Happy birthday, dear Happy birthday to you! 编写程序为Mike和Lily输出生日歌。最简单的实现方法是重 复使用print()语句,函数的基本使用,函数的定义,函数是一段具有特定功能的、可重用的语句组,用函数名来 表示并通过函数名进行完成功能调用。 函数也可以看作是一段具有名字的子程序,可以在需要的地 方调用执行,不需要在每个执行地方重复编写这些语句。 每次使用函数可以提供
2、不同的参数作为输入,以实现对不同数据的处理;函数执行后,还可以反馈相应的处理结果。 函数是一种功能抽象,函数的定义,Python定义一个函数使用def保留字,语法形式如下: def (): 注释 return ,函数的定义,最简单的实现方法是重复使用print()语句,如下:,函数的定义, Happy birthday to you! Happy birthday to you! Happy birthday, dear Mike! Happy birthday to you! Happy birthday to you! Happy birthday to you! Happy birthd
3、ay, dear Lily! Happy birthday to you!,函数调用的过程,程序调用一个函数需要执行以下四个步骤: (1)调用程序在调用处暂停执行; (2)在调用时将实参复制给函数的形参; (3)执行函数体语句; (4)函数调用结束给出返回值,程序回到调用前的暂 停处继续执行。,函数调用的过程,微实例5.1中happyB()的被调用过程,函数调用的过程,函数调用的过程,lambda函数,Python的有33个保留字,其中一个是lambda,该保留字用于定义 一种特殊的函数匿名函数,又称lambda函数。 匿名函数并非没有名字,而是将函数名作为函数结果返回,如下: = lambd
4、a : lambda函数与正常函数一样,等价于下面形式: def (): return ,lambda函数,简单说,lambda函数用于定义简单的、能够在一行内表示的函数,实例如下。,f = lambda x, y : x + y type(f) f(10, 12) 22,函数的参数传递,可选参数和可变数量参数,在定义函数时,有些参数可以存在默认值。 默认值参数必须出现在函数参数列表的最右端,且任何一个默认值参数右边不能有非默认值参数。,可选参数和可变数量参数,在函数定义时,可以设计可变数量参数,通过参数前增加 星号(*)实现,def vfunc(a, *b): print(type(b) f
5、or n in b: a += n return a vfunc(1,2,3,4,5) 15,参数的位置和名称传递,Python提供了按照形参名称输入实参的方式,调用如下: result = func(x2=4, y2=5, z2=6, x1=1, y1=2, z1=3) 由于调用函数时指定了参数名称,所以参数之间的顺序可 以任意调整。,变量的返回值,return语句用来退出函数并将程序返回到函数被调用的位 置继续执行。 return语句同时可以将0个、1个或多个函数运算完的结果 返回给函数被调用处的变量,例如。,def func(a, b): return a*b s = func(knoc
6、k, 2) print(s) knockknock,变量的返回值,函数可以没有return,此时函数并不返回值,如微实例 5.1的happy()函数。函数也可以用return返回多个值,多 个值以元组类型保存,例如。,def func(a, b): return b,a s = func(knock, 2) print(s, type(s) (2, knock) ,Python内置函数(BIF),Python解释器提供了68个内置函数,其中大部分会经常用到,常用内置函数,内置函数不需要导入任何模块即可使用 执行下面的命令可以列出所有内置函数 dir(_builtins_),常用内置函数,续表1
7、,常用内置函数,续表2,常用内置函数,续表3,常用内置函数,续表4,常用内置函数,续表5,常用内置函数,常用内置函数,dir()函数可以查看指定模块中包含的所有成员或者指定对象类型所支持的操作。 help()函数则返回指定模块或函数的说明文档。 import time dir(time) help(time),常用内置函数,ord()和chr()是一对功能相反的函数,ord()用来返回单个字符的序数或Unicode码,chr()用来返回某序数对应的字符 str()则直接将其任意类型参数转换为字符串。 ord(a) 97 chr(65) A chr(ord(A)+1) B str(1) 1 st
8、r(1234) 1234 str(1,2,3) 1, 2, 3 str(1,2,3) (1, 2, 3) str(1,2,3) set(1, 2, 3),常用内置函数,max()、min()、sum()这三个内置函数分别用于计算列表、元组或其他可迭代对象中所有元素最大值、最小值以及所有元素之和,sum()要求元素支持加法运算,max()和min()则要求序列或可迭代对象中的元素之间可比较大小。 import random a = random.randint(1,100) for i in range(10) #列表推导式 a 72, 26, 80, 65, 34, 86, 19, 74, 5
9、2, 40 print(max(a), min(a), sum(a) 86 19 548 如果需要计算该列表中的所有元素的平均值,可以直接这样用: sum(a)*1.0/len(a) #Python 2.7.12 54.8 sum(a)/len(a) #Python 3.5.2 54.8,常用内置函数,内置函数max()和min()的key参数可以用来指定比较规则 x = 21, 1234, 9 max(x) 9 max(x, key=len) 1234 max(x, key=int) 1234,常用内置函数,内置函数type()和isinstance()可以判断数据类型。 type(3) #
10、查看3的类型 type(3) in (list, tuple, dict) #判断3是否为list,tuple或dict类型的实例 False isinstance(3, int) #判断3是否为int类型的实例 True isinstance(3j, (int, float, complex) #判断3是否为int,float或complex类型 True,常用内置函数,range()是非常常用的内置函数,语法格式为range(start, end , step )。该函数返回具有惰性求值特点的range对象,其中包含左闭右开区间start,end)内以step为步长的整数。参数start默
11、认为0,step默认为1。 range(5) #start默认为0,step默认为1 range(0, 5) list(_) 0, 1, 2, 3, 4 list(range(1, 10, 2) #指定起始值和步长 1, 3, 5, 7, 9 list(range(9, 0, -2) #步长为负数时,start应比end大 9, 7, 5, 3, 1,常用内置函数,sorted()对列表、元组、字典、集合或其他可迭代对象进行排序并返回新列表,reversed()对可迭代对象(生成器对象和具有惰性求值特性的zip、map、filter、enumerate等类似对象除外)进行翻转(首尾交换)并返回
12、可迭代的reversed对象。 x = aaaa, bc, d, b, ba sorted(x, key=lambda item: (len(item), item) #先按长度排序,长度一样的正常排序 b, d, ba, bc, aaaa reversed(x) #逆序,返回reversed对象 list(reversed(x) #reversed对象是可迭代的 5, 1, 9, 3, 8, 7, 10, 6, 0, 4, 2,常用内置函数,内置函数map()把一个函数func依次映射到序列或迭代器对象的每个元素上,并返回一个可迭代的map对象作为结果,map对象中每个元素是原序列中元素经过
13、函数func处理后的结果。 list(map(str, range(5) #把列表中元素转换为字符串 0, 1, 2, 3, 4 def add5(v): #单参数函数 return v+5 list(map(add5, range(10) #把单参数函数映射到一个序列的所有元素 5, 6, 7, 8, 9, 10, 11, 12, 13, 14 def add(x, y): #可以接收2个参数的函数 return x+y list(map(add, range(5), range(5,10) #把双参数函数映射到两个序列上 5, 7, 9, 11, 13,常用内置函数,eval()函数是一个
14、十分重要的函 数,它能够以Python表达式的方式解析并执行字符串,将返回结果输出 exec()函数用来执行指定的Python源代码或者由compile()编译的代码对象,x = 1 eval(x + 1) 2 eval(1.1 + 2.2) 3.3 eval(“_import_(os).startfile(rc:windowsnotepad.exe),exec(help(sum) #查看内置函数sum的帮助文档,常用内置函数,enumerate()函数用来枚举可迭代对象中的元素,返回可迭代的enumerate对象,其中每个元素都是包含索引和值的元组。 list(enumerate(abcd)
15、 #枚举字符串中的元素 (0, a), (1, b), (2, c), (3, d) list(enumerate(Python, Greate) #枚举列表中的元素 (0, Python), (1, Greate) list(enumerate(a:97, b:98, c:99.items() #枚举字典中的元素 (0, (c, 99), (1, (a, 97), (2, (b, 98) for index, value in enumerate(range(10, 15): #枚举range对象中的元素 print(index, value), end= ) (0, 10) (1, 11)
16、 (2, 12) (3, 13) (4, 14),常用内置函数,标准库functools中的函数reduce()可以将一个接收2个参数的函数以迭代累积的方式从左到右依次作用到一个序列或迭代器对象的所有元素上,并且允许指定一个初始值。 from functools import reduce seq = list(range(1, 10) reduce(lambda x, y: x+y, seq) 45,常用内置函数,内置函数filter()将一个单参数函数作用到一个序列上,返回该序列中使得该函数返回值为True的那些元素组成的filter对象,如果指定函数为None,则返回序列中等价于True的元素。 seq = foo, x41, ?!, * def func(x): return x.isalnum() #测试是否为字母或数字 filter(func, seq) #返回filter对象 list(filter(func, seq) #把filter对象转换为列表 foo, x41,常用内置函数,zip()函数用来把多个可迭代对象中的元素压缩到一起,返回一个可迭代的zip对象,其中每