一、关于函数的语法

1.语法def 函数名([参数]):

函数文档字符串

函数体

2.函数名:是必须符合Python名称规范要求的标识符,需要避免使用Python的关键字;

3.参数:称为函数的形参,调用时传递的真实数据称为实参,函数的参数可以没有,也可以是多个甚至可变个数;

4.函数文档字符串:在“Python语句的补充和修订”那节老猿已经介绍,是很有用的东西,对于提高代码的可读性和用户体验很有帮助,注意必须与函数体一样与函数定义行保持缩进,具体内容在此老猿不再赘述;

5.函数体:定义函数具体的操作代码,如果需要返回值,必须使用return语句返回,唯一例外是生成器函数使用yield返回值。如果函数没有返回值,可以不使用return或return后不跟返回值或return None即可。

二、函数的位置参数

函数的参数在调用时传递数据时,默认是按参数的位置顺序传值,即形参的顺序与实参的顺序逐一对应,这种参数的使用模式称为位置参数。位置参数是最常用的一种参数使用形式。

使用位置参数传递实参的情况下,要求有缺省值的参数放在无缺省值的参数后面,如果某个有缺省值的参数需要使用位置参数方式传递非缺省值,则需要确保该参数前面的所有参数都有实参传入。>>> def cal(method,number1,number2):  #使用位置参数传参

if method=='+':return number1+number2
elif method=='-':return number1-number2
else:return None
>>> cal('+',1,2)
3
>>> def cal(method='+',number1,number2):  #带缺省值参数不能放在无缺省值参数的前面
if method=='+':return number1+number2
elif method=='-':return number1-number2
else:return None
SyntaxError: non-default argument follows default argument
>>> def cal(number1,number2,method='+'):  #带缺省值参数放在无缺省值参数的后面
if method=='+':return number1+number2
elif method=='-':return number1-number2
else:return None
>>> cal(1,2)
3
>>> cal(1,2,'-')
-1

执行截图:


三、函数的关键字参数

除了位置参数的函数参数使用方式,还有一种在函数调用时指定形参等于指定实参的参数使用模式,该模式称为关键字参数。关键字参数使用可以不按形参的顺序传递实参,系统按形参的名字确认实参传递给哪个参数。如:def minus(minuend,subtractor): ? ?return minuend-subtractor ?#定义一个减法函数

minus(10,2) #结果为8

minus(2,10) #结果为-8

minus(subtractor=10,minuend=2) #结果为-8

四、小结

位置参数和关键字参数都是函数调用传递参数的常规方法,两者在函数参数的使用与字符串格式化的format方法中的自动编号索引format方法和关键字参数方式的format方法处理机制非常类似。

在位置参数和关键字参数的使用上,需要注意在同一个函数定义中两者尽量不混用,一般情况下,只有可选带缺省值的参数多而无缺省值的位置参数比较少的情况下才混用。如果位置参数和关键字参数要混用,必须确保位置参数在前,关键字参数在后,这样解释器才能按照先用位置参数传值,再用关键字参数传值,没有出现的参数使用缺省值;

举例:minus(subtractor=10,2)

#报语法错:SyntaxError: positional argument follows keyword argument