《(高职)5.2 函数参数ppt课件.pptx》由会员分享,可在线阅读,更多相关《(高职)5.2 函数参数ppt课件.pptx(12页珍藏版)》请在taowenge.com淘文阁网|工程机械CAD图纸|机械工程制图|CAD装配图下载|SolidWorks_CaTia_CAD_UG_PROE_设计图分享下载上搜索。
1、5.2 函数参数PYTHON 程序设计丁辉 商俊燕 范晓玲u5.1 函数基础函数基础u5.2 函数参数函数参数u5.3 变量的作用域变量的作用域u5.4 函数设计精选案例函数设计精选案例u小结小结2022年5月9日3第五章 设计自己的积木块函数2022年5月9日4Python的函数定义非常简单,但是灵活性非常大,比如前述的add()函数,只要传递两个实参对象就可以进行”+”运算。Python函数定义时,形式参数不需要进行类型说明,同样返回值也不需要进行类型说明,这样就给函数功能等带来了很大的灵活性。另外,Python函数的形式参数可以是多种形式,如位置参数、默认参数、可变参数、关键参数,以提高
2、函数的灵活性,简化调用。5.2 函数参数2022年5月9日51. 位置参数l前述定义的add()函数有两个形式参数,当调用该函数时需要传递两个实际参数,依次传递给形式参数变量x和y。如add(-12,78.5)的调用,将-12传递x,78.5传递y,由于x,y在定义函数时的顺序就已经确定了,传递时,也是按顺序依次进行传递。像x,y这样的形式参数称之为位置参数。l调用函数时,位置参数必须按次序传递,如果调用add()函数时,只给了一个实际参数,如: add(12)Traceback (most recent call last): File , line 1, in add(12)TypeErr
3、or: add() missing 1 required positional argument: y从上面输出的错误提示中发现这样的关键词”positional argument”,从而说明x,y是属于位置参数。5.2 函数参数2022年5月9日62. 默认参数l即在定义函数时,为某些形式参数设置默认值,这类参数称之为默认参数。函数调用时,对于默认参数,如果没有提供实际参数,则使用默认值,如果提供了实际参数,则使用实际参数值。也就是说,在调用函数时,是否为默认参数传递实参是可选的,具有较大的灵活性。带有默认参数的函数定义格式如下: def 函数名(,形参名=默认值,): 多行或单行注释 函数
4、体l定义一个函数my_pow(),求xy: def my_pow(x,y=2): 求x的y次方 s=1 for i in range(y): s=s*x return s my_pow(3,5) #求35,将3传递给x,5传递给y 243 my_pow(-3) #只提供了一个实参-3,传递给x,形参y使用默认值2,即求(-3)2 95.2 函数参数2022年5月9日7 help(print)Help on built-in function print in module builtins:print(.) print(value, ., sep= , end=n, file=sys.stdo
5、ut, flush=False) Prints the values to a stream, or to sys.stdout by default. Optional keyword arguments: file: a file-like object (stream); defaults to the current sys.stdout. sep: string inserted between values, default a space. end: string appended after the last value, default a newline. flush: w
6、hether to forcibly flush the stream.5.2 函数参数都是默认参数都是默认参数默认参数要放在位置参数之后默认参数要放在位置参数之后2022年5月9日83.关键参数l如果一个函数有多个参数,在调用时,如果不想按位置顺序提供实参,那么可以通过按形式参数名来传递参数。这种参数传递方式称为关键参数。对前面定义的add()函数采用关键参数调用如下: add(y=23,x=-43.2) -20.200000000000003 add(y=czili.,x=My school is ) My school is czili.采用关键参数进行参数传递,可以不用考虑参数传递的顺
7、序。避免了用户需要牢记参数顺序的麻烦,使得函数调用更加灵活方便。5.2 函数参数关键参数是一种参数传递方式关键参数是一种参数传递方式2022年5月9日94.可变长度参数l 可变长度参数,顾名思义就是传入的参数个数是可变的。Python中可变长度参数有两种形式,分别是*args和*kwds。*args用来接收任意多个实参并将其放在一个元组中,*kwds用来接收类似于显示赋值形式的多个实参并放入字典中。l 定义一个函数,求不定长序列的和,即求:a+b+c+,所求序列的长度是不确定的,为此采用*args这种不定长参数的形式来定义函数如下: def sum(*args): print(type(arg
8、s) #查看一下args的类型 s=0 for k in args: s=s+k print(s) l sum()函数的调用 sum(1,2,3) #形参args是一个元组 6 sum(-34.5,23,79.8,234) 302.35.2 函数参数2022年5月9日104.可变长度参数(续)l *kwds形式参数的函数定义 def fun(*kwds): print(type(kwds) #查看一下kwds的类型 for key,v in kwds.items(): #遍历一下kwds print(key,v)l fun()函数的调用其实就是采用关键字参数的形式进行调用 fun(name=w
9、ang,sex=F,age=18) #形式参数保存成字典的类型name wangsex Fage 185.2 函数参数2022年5月9日115.关于参数传递l 关于参数传递,需要理解的是值传递还是引用传递。如果实参是不可变对象,则是值传递,如果实参是可变对象,则是引用传递。由于引用传递,在函数内修改引用对象的值时,这个修改也会改变实参引用对象的值。但是如果在函数内又重新创建了对象,并且是形参指向了新的对象,则不会修改实参引用对象的值。通过以下示例来进一步理解引用传递。 def fun_1(x): #定义一个函数 print(x) #输出传递过来的列表 x.append(8) #给列表追加一个元
10、素8,修改了列表的值 print(x) #输出新列表的值 list=0,1,2,3 fun_1(list) #实参列表为可变对象 0, 1, 2, 3 0, 1, 2, 3, 8 list #调用函数后list的值 0, 1, 2, 3, 8 这个案例说明,在用列表作实参调用函数时,在函数内部修改了列表的值,则实参引用对 象list的值也改变了 def fun_2(x): print(x) x=x+88 #创建了一个列表 print(x) list=0,1,2,3 fun_2(list) 0, 1, 2, 3 0, 1, 2, 3, 88 list 0, 1, 2, 3 #此处的list没有改变由于函数内的语句”x=x+88”是创建了新的列表对象,所以实参引用对象就不会改变了。5.2 函数参数2022年5月9日12