一、函数的定义与使用
1. 函数的定义2.函数的调用(与其他语言一样) 二、参数列表
1.传参or传地址2.形参、实参(与几乎其他语言一样)
一、函数的定义与使用
函数必须先定义才能调用
1. 函数的定义语法:
def 函数名 (参数列表):
----函数体
----[return 返回值]
注意:
- 缩进return结束函数,默认返回为None;可以返回多个值,用逗号分隔开即可;若返回多个值,其实返回的是一个元组
必须确保函数名调用函数之前,必须保证Python已经知道函数的存在
二、参数列表 1.传参or传地址与其他语言不同,python有一个默认规则:
当参数为列表、对象、字典等(可变对象的引用),传的是地址!
当参数为字符串、数字和元组(不变对象的引用),传的是值!
传值示例 def a(n): #定义了一个带有参数的函数 n += 100 #主要实现 +100的 *** 作并输出n的值 print(n) an=5 #现有一个变量 print(an) a(an) print(an) #运行结果: 5 105 5
在上例中,定义了一个带有参数的函数a(n),函数体内,实现n+100的 *** 作并打印输出,定义一个变量an=5 ,然后执行如下 *** 作:1、打印输出an;2、用an做为实参调用a(n)函数,3、再打印输出an的值,运行后结果为: 5 105 5,变量an的值在参与函数运算前后没有发生变化。
传地址示例 def b(n): #定义了一个带有参数的函数b n[2] = 300 print(n) bn = [1,5,6,5,7,9] #长度为6的列表 print(bn) b(bn) print(bn) #运行结果 [1, 5, 6, 5, 7, 9] [1, 5, 300, 5, 7, 9] [1, 5, 300, 5, 7, 9]
在上例中,定义了一个带有参数的函数b(n),函数体内,定义了一个列表且列表的第3个元素的值为300,最后打印输出n的值。定义了一个长度为6的列表bn,然后执行如下 *** 作:1、打印输出列表bn的值;2、用bn做为实参调用函数b(n),3、再打印输出列表bn的值,运行后结果为: [1, 5, 6, 5, 7, 9]
[1, 5, 300, 5, 7, 9],[1, 5, 300, 5, 7, 9],从以上 *** 作中可以看出,列表bn在做为实参参与函数b(n)的运算之后,自身的值发生了变化
不同点:
位置参数:
按位置进行参数的传递
默认参数:
如果在函数定义时,参数中的某个形参有值,则称这个参数为默认参数
def addFive(a, b=5): #定义了一个带有默认参数的函数 sum=a+b #在函数体内计算a+5 print(sum) addFive(6)#输出11 addFive(6,7)#输出13
注意事项:
1)所有默认参数必须放在放在非默认参数之后;
2)虽然在定义时给默认参数指定了值,但在函数调用时仍可以为它传入其它的值(新值将会覆盖旧值)
关键字参数
我们使用命名(关键字)而非位置(一直以来我们所使用的方式)来指定函数中的参数
我们不再需要考虑参数的顺序,函数的使用将更加容易。
我们可以只对那些我们希望赋予的参数以赋值,只要其它的参数都具有默认参数值。
def func(a, b=5, c=10): print('a is', a, 'and b is', b, 'and c is', c) func(3, 7) func(25, c=24) func(c=50, a=100) 输出: a is 3 and b is 7 and c is 10 a is 25 and b is 5 and c is 24 a is 100 and b is 5 and c is 50
名为 func 的函数有一个没有默认参数值的参数,后跟两个各自带有默认参数值的参数。
在第一次调用python函数时,func(3, 7),参数 a 获得了值 3,参数 b 获得了值 7,而 c 获得了默认参数值 10。
在第二次调用函数时,func(25, c=24),由于其所处的位置,变量 a 首先获得了值 25。然后,由于命名——即关键字参数——指定,变量 c 获得了值 24。变量 b 获得默认参数值 5。
在第三次调用函数时,func(c=50, a=100),我们全部使用关键字参数来指定值。在这里要注意到,尽管 a 在 c 之前定义,但我们还是在变量 a 之前指定了变量 c。
不定长参数
函数的形参还可以接收不定个数的实参,即用户可以给函数提供可变长度的参数,这就是不定长参数,可以通过在形参前面使用*来实现
求一个学生所有课程的平均成绩。 分析: 这个函数仍然是求平均成绩的,但是题中没有给出课程数的具体值,所以每门课的成绩也是不确定的,针对这种情况,该如何处理呢?可以用可变参数来处理。 用a表示课程的门数,*b是可变参数,代表a门课程的成绩。 avgScore(a, *b)函数中,形参a表示有a门课程,*b就是a门课程的成绩,在函数体内部,用for循环语句逐一读取每门课的成绩,然后对成绩求和、求平均值,最后打印输出 def avgScore(a, *b): sum = 0 for item in b: sum = sum + item avg = sum / a print(‘平均成绩为:' + str(avg))
拆分参数列表
如果一个函数所需要的参数存储在列表、元组或字典中,就可以直接从列表、元组或字典中拆分出函数所需要的参数,其中列表、元组拆分出来的结果作为位置参数,而字典拆分出来的结果作为关键字参数
def SumVal(*args):#定义函数SumVal sum = 0 for i in args: sum+=I print(‘求和结果是’,sum) ls = [3,5.2,7,1] SumVal(*ls) def StudentInfo(name,chineeselevel,country) #定义函数StudentInfo print(‘姓名:%s,中文水平:%s,国家:%s’%(name,chineselevel,country)) d={‘country’:‘中国’,‘chineselevel’:‘良好’,‘name’:‘李晓明’} StudentInfo(**d)
参数的传递有以下几种情况:按“位置传递”与按“名称传递”
在调用的时候,我们发现一下两种方式都是可以的,
1) 按位置传递
avgScore(90,85,79)
成绩高于平均分;
2)按名称传递
avgScore(c=79,a=90,b=85)
成绩高于平均分;
当使用第一种调用方式时,是对照参数的位置来进行传递,使用第二种方式调用的时候,直接用参数名来进行传递,这两种传递方式的运行结果是一样的 。
欢迎分享,转载请注明来源:内存溢出
评论列表(0条)