函数进阶
位置参数
位置参数这个东西我们并不陌生,之前所编写的函数使用的就是位置参数。位置参数,顾名思义,传入函数时每个参数都是通过位置来作区分的。函数调用时,传入的值需按照位置与参数一一对应。
def overspeed_rate(current, max, min):
if current > max:
return (current - max) / max # 超过最大时速,结果为正
elif current < min:
return (current - min) / min # 超过最小时速,结果为负
else:
return 0 # 不超速,结果为 0
参数默认值
def 函数(参数1, 参数2=默认值):
pass
关键字参数
我们还可以在函数调用时,以 参数名=值 的形式来向指定的参数传入值。
overspeed_rate(100, min=80)
任意参数列表
定义函数时,在参数列表中使用 **参数名,可以接收一切关键字参数。类似的,参数列表中使用 *参数名,就可以接受任意数量的非关键字参数,也就是可变参数。 如,计算任意个数的乘积:
def multiply(*nums):
result = 1
for n in nums:
result *= n
return result
>>> multiply(1,3,5,7)
105
这个函数能接收任意个参数,这正是 *nums 所发挥的作用。函数所有接收到的非关键字参数组装成一个元组,并绑定到 nums 上。来试验一下:
>>> def multiply(*nums):
… print(nums)
…
>>> multiply(1, 2, 3, 4, 5)
(1, 2, 3, 4, 5)
多返回值
典型情况下,函数只有一个返回值,但是 Python 也支持函数返回多个返回值。
要返回多个返回值,只需在 return 关键字后跟多个值(依次用逗号分隔)。
def date():
import datetime
d = datetime.date.today()
return d.year, d.month, d.day