1 def CalCircleArea(): #定义名字为CalCircleArea的函数 2 s=3.14*3*3 #计算半径为3的圆的面积 3 print('半径为3的圆的面积为:%.2f'%s) #将计算结果输出 4 CalCircleArea() #调用函数CalCircleArea
提示:Python语言中,开发者在程序中定义的变量名、函数名、类名等都是Python语言的自定义标识符,它们的命名规则完全相同。
二、形参与实参 1、形参的全称是形式参数,即定义函数时函数名后面的一对小括号中给出的参数列表。 形参只能在函数中使用,其作用是接收函数调用时传入的参数值(即后面要介绍的实参),并在函数中参与运算。 2、实参的全称是实际参数,即在调用函数时函数名后面的一对小括号中给出的参数列表。 当调用函数时,会将实参的值传递给对应的形参,函数中再利用形参做运算、得到结果。 提示:实参名和形参名不需要相同,在传递时根据位置一一对应。当有多个实参时,各实参之间用逗号分隔。 3、当实参传递给形参后,如果在函数体中对形参值做修改,则该修改并不会影响实参,即实参值不会改变。 但如果实参是列表等对象时,可在函数体中通过形参修改实参列表中对应元素的值。 例:形参值的修改对实参值的影响示例。1 def ModifyVal(x,y): #ModifyVal函数定义 2 x=y #将y的值赋给形参x 3 def ModifyListElement(ls,idx,val): #ModifyListElement函数定义 4 ls[idx]=val #将ls中下标为idx的元素值赋为val 5 a,b=5,10 #a和b的值分别赋为5和10 6 print(a,b) #输出5和10 7 ModifyVal(a,10) #调用ModifyVal函数试图将a赋为10,但实际不会修改a的值 8 print(a,b) #仍输出5和10 9 c=[1,2,3] #c的值赋为[1,2,3] 10 print(c) #输出[1,2,3] 11 ModifyVal(c,[4,5,6]) #调用ModifyVal函数试图将c赋为[4,5,6],但实际不会修改 12 print(c) #仍输出[1,2,3] 13 ModifyListElement(c,1,5) #调用ModifyListElement函数将下标为1的元素赋为5 14 print(c) #输出[1,5,3]三、默认参数和关键字参数 (1)、函数的默认参数就是缺省参数,即当调用函数时,如果没有为某些形参传递对应的实参,则这些形参会自动使用默认参数值。 例:带默认参数的函数的定义和调用方法示例。
1 def StudentInfo(name,country='中国'): #参数country的默认参数值为'中国’ 2 print('姓名:%s,国家:%s'%(name,country)) 3 StudentInfo('李晓明') #这里没有给country传实参值,但因为有默认参数所以不会出错 4 StudentInfo('大卫','美国') #给country传了实参,则不再使用默认参数注意:name并没有默认参数,所以在调用函数时必须为其指定实参,否则运行程序会报错。 例如,当执行StudentInfo()时,系统会给出如下报错信息:TypeError: StudentInfo() missing 1 required positional argument: 'name' (2)、关键字参数:在调用函数时,除了前面那种通过位置来体现实参和形参的对应关系的方法(即位置参数),还有一种使用关键字参数的方法,其形式为“形参=实参”。 例:关键字参数使用方法示例。
1 def StudentInfo(name, chineselevel='良好', country='中国'): 2 print('姓名:%s,中文水平:%s,国家:%s'%(name,chineselevel,country)) 3 StudentInfo('李晓明') 4 StudentInfo('大卫', country='美国') 5 StudentInfo(country='美国', chineselevel='一般', name='约翰')提示:位置参数和关键字参数可以混合使用,但位置参数必须在前、关键字参数在后,如第4行代码所示。如果将第4行代码改为:StudentInfo(name='大卫', '良好', '美国'),即第一个参数使用了关键字参数形式、后两个参数使用了位置参数形式,则系统会给出如下错误提示:SyntaxError: positional argument follows keyword argument 四、不定长参数 1、概述:不定长参数,即在调用函数时可以接收任意数量的实参,这些实参在传递给函数时会被封装成元组(位置参数)或字典(关键字参数)形式。一般情况下,不定长参数是放在形参列表的最后,前面传入的实参与普通形参一一对应,而后面剩余的实参会被封装成元组或字典后传给不定长参数。 2、语法格式:带不定长参数的函数定义方法如下所示: def 函数名([普通形参列表,] *不定长参数名 [,普通形参列表]): 函数体 或 def 函数名([普通形参列表,] **不定长参数名): 函数体 提示:“*不定长参数名” 表示这个不定长参数对应的是一组位置参数;而 “**不定长参数名” 表示这个不定长参数对应的是一组关键字参数。 3、示例:
1 def StudentInfo1(name, *args): #定义函数StudentInfo1 2 print('姓名:', name, ',其他:', args) 3 def StudentInfo2(name, **args): #定义函数StudentInfo2 4 print('姓名:', name, ',其他:', args) 5 def StudentInfo3(name, *args, country='中国'): #定义函数StudentInfo3 6 print('姓名:', name, ',国家:', country, ',其他:', args) 7 StudentInfo1('李晓明', '良好', '中国') 8 StudentInfo2('李晓明', 中文水平='良好', 国家='中国') 9 StudentInfo3('李晓明', 19, '良好') 10 StudentInfo3('大卫', 19, '良好', country='美国')输出:姓名: 李晓明 ,其他: ('良好', '中国') 姓名: 李晓明 ,其他: {'中文水平': '良好', '国家': '中国'} 姓名: 李晓明 ,国家: 中国 ,其他: (19, '良好') 姓名: 大卫 ,国家: 美国 ,其他: (19, '良好') 注意:如果调用StudentInfo1和StudentInfo2这两个函数的形式改为: StudentInfo1('李晓明', 中文水平='良好', 国家='中国’) StudentInfo2('李晓明', '良好', '中国') 则运行程序时系统会给出报错信息。这是由于StudentInfo1的args只能接收一组位置参数,如果传入关键字参数就会出错;而StudentInfo2的args只能接收一组关键字参数,如果传入位置参数也会报错。 五、拆分参数列表 1、概述:如果一个函数所需要的参数已经存储在了列表、元组或字典中,则可以直接从列表、元组或字典中拆分出来函数所需要的这些参数。其中列表、元组拆分出来的结果作为位置参数,而字典拆分出来的结果作为关键字参数。 2、例:不通过拆分方法传递参数示例
1 def SumVal(*args): #定义函数SumVal 2 sum=0 3 for i in args: 4 sum+=i 5 print('求和结果为:',sum) 6 ls=[3,5.2,7,1] 7 SumVal(ls[0],ls[1],ls[2],ls[3])例:通过拆分方法传递参数示例
1 def SumVal(*args): #定义函数SumVal 2 sum=0 3 for i in args: 4 sum+=i 5 print('求和结果为:',sum) 6 ls=[3,5.2,7,1] 7 SumVal(*ls)提示:*ls的作用是把列表ls中的所有元素拆分出来作为SumVal的实参,即等价于SumVal(3, 5.2, 7, 1) 例:字典拆分结果作为函数关键字参数示例
1 def StudentInfo(name, chineselevel, country): #定义函StudentInfo 2 print('姓名:%s,中文水平:%s,国家:%s'%(name,chineselevel,country)) 3 d={'country': '中国', 'chineselevel':'良好', 'name':'李晓明'} 4 StudentInfo(**d)提示:**d的作用是把字典d中的所有元素拆分出来作为StudentInfo的实参,即等价于StudentInfo(country='中国',chineselevel='良好', name='李晓明')。 六、返回值 1、概述:我们在前面的很多例子中都是利用print函数将计算结果输出到屏幕上,但这些显示在屏幕上的结果没有办法再获取到以参与其他运算。如果希望能够将一个函数的运算结果返回到调用函数的位置,以使得可以继续用该运算结果再去参与其他运算,此时则应使用return语句。我们在前面写的函数中虽然都没有显式地写return语句,但实际上这些函数都有一个隐式的什么数据都不返回的return语句,即return None(或直接写为return)。 2、例:通过return返回字符串、列表、元组等数据
def GetList(): #定义函数GetList return [1,2,3] #将包含3个元素的列表返回 def GetTuple(): #定义函数GetTuple return (1,2,3) #将包含3个元素的元组返回 def GetElements(): #定义函数GetElements return 1,2,3 #返回3个数值数据,实际上会将这3个数据封装成一个元组返回 print(type(GetList())) print(GetList()) print(type(GetTuple())) print(GetTuple()) print(type(GetElements())) print(GetElements())输出:通过return返回字符串、列表、元组等数据 <class 'list'> [1, 2, 3] <class 'tuple'> (1, 2, 3) <class 'tuple'> (1, 2, 3)