函数的定义和调用
一个程序由一个个任务组成;函数就是代表一个任务或者一个功能。函数是代码复用的通用机制。
要点
Python定义函数的语法:
def 函数名 ([参数列表]) :
‘’‘文档字符串’’’
函数体/若干语句
- Python执行 def时,会创建一个函数对象,并绑定到函数名变量上。
- return返回值 :如果函数体中包含 return语句,则结束函数执行并返回值;如果函数体中不包含return语句,则返回None值。
- 调用函数之前,必须要先定义函数,即先调用def创建函数对象。内置函数对象会自动创建;标准库和第三方库函数,通过import 导入模块时,会执行模块中的def语句。
形参和实参
形参用于定义,实参用于调用。
def printMax(a,b):
'''实现两个数的比较,并返回较大的值'''
if a>b:
print(a,'较大值')
else:
print(b,'较大值')
#函数的调用
printMax(5,3)
执行结果:
5 较大值
printMax函数中,printMax(a,b)内a和b称为“形式参数”, 即形参是在定义函数时使用的;在调用函数时,传递的参数称为“实际参数”,上述代码printMax(5,3),5和3就是实际参数。
补充:函数的注释
一般建议在函数体开始的部分附上函数定义说明,以增强程序的可读性。上述代码中的“实现两个数的比较,并返回较大的值”就是函数的注释。调用help(函数名.doc)可以打印输出函数的文档字符串。
help(printMax)
执行结果:
返回值
return的作用:
- 结束函数执行。
- 返回值。
def my_avg(a,b):
return (a+b)/2
#函数的调用
c = my_avg(1,2)
print(c)
执行结果:
1.5
参数的几种类型
位置参数
函数调用时,实参默认按位置顺序传递,需要个数和形参匹配。按位置传递的参数,称为: “位置参数”。
def f1(a,b,c,d):
print(a,b,c,d)
#函数的调用
f1(1,2,3,4)
f1(5,6,7) #报错,位置参数不匹配
默认值参数
默认值参数放到位置参数后面。
def f1(a,b,c=1,d=2):
print(a,b,c,d)
# 函数的调用
f1(3,5)
f1(3,5,6)
执行结果:
3 5 1 2
3 5 6 2
可变参数、命名参数、强制命名参数
可变参数指的是“可变数量的参数”:
- *param(一个星号),将多个参数收集到一个“元组”对象中。
- **param(两个星号),将多个参数收集到一个“字典”对象中。
另外,按照形参的名称传递参数,称为“命名参数”,也称“关键字参数”;在带星号的“可变参数”后面增加新的参数,必须在调用的时候“强制命名参数”。
def f1(*a,b,c):
print(a,b,c)
#f1(2,3,4) 报错。此时a将2,3,4 全部收集,而b和c没有赋值。
f1(1,b=2,c=3)
执行结果:
(1,) 2 3
lambda表达式和匿名函数
- lambda表达式可以用来声明匿名函数,其中,只允许包含一个表达式,不能包含复杂语句,该表达式的计算结果就是函数的返回值。
- 基本语法:
lambda arg1,arg2,arg3… : <表达式>
其中: arg1/arg2/arg3为函数的参数,<表达式>相当于函数体,运算结果是表达式的运算结果。
eval()函数
将字符串str当成有效的表达式来求值并返回计算结果。
#测试eval()函数
n = "print('Hello world!!!')"
eval(n)
可见,n为字符串,执行仍有结果:Hello world!!!