函数进阶

函数进阶

位置参数

位置参数这个东西我们并不陌生,之前所编写的函数使用的就是位置参数。位置参数,顾名思义,传入函数时每个参数都是通过位置来作区分的。函数调用时,传入的值需按照位置与参数一一对应。

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