在 Python 中使用关键字参数

已完成

可选参数要求赋予默认值。 这些已命名的参数称为关键字参数。 关键字参数值必须在函数本身当中定义。 调用使用关键字参数定义的函数时,完全不需要使用这些参数。

阿波罗 11 号任务大约需要 51 小时才能进入月球。 我们来创建一个函数,该函数通过使用与阿波罗 11 号任务相同的值作为默认值来返回预计到达时间:

from datetime import timedelta, datetime

def arrival_time(hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime("Arrival: %A %H:%M")

该函数使用 datetime 模块来定义当前时间。 它使用 timedelta 允许生成新时间对象的加法运算。 计算该结果后,它会返回字符串格式的 arrival 估算结果。 尝试不使用任何参数调用该函数:

arrival_time()
Arrival: Saturday 16:42

即使该函数定义了关键字参数,但你在调用函数时,该函数也不会允许传递一个关键字参数。 在本例中,hours 变量默认为 51。 若要验证当前日期是否正确,请使用 0 作为 hours 的值:

arrival_time(hours=0)
Arrival: Thursday 13:42

混合参数和关键字参数

有时,函数需要组合使用参数和关键字参数。 在 Python 中,此组合遵循特定的顺序。 始终首先声明参数,然后声明关键字参数。

更新 arrival_time() 函数以接收必需参数,该参数为目标位置的名称:

from datetime import timedelta, datetime

def arrival_time(destination, hours=51):
    now = datetime.now()
    arrival = now + timedelta(hours=hours)
    return arrival.strftime(f"{destination} Arrival: %A %H:%M")

因为你添加了一个必需参数,所以不能再不使用任何参数调用该函数:

arrival_time()
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
TypeError: arrival_time() missing 1 required positional argument: 'destination'

使用 "Moon" 作为 destination 的值来避免此错误:

arrival_time("Moon")
Moon Arrival: Saturday 16:54

还可以传递两个以上的值,但需要用逗号分隔它们。 进入轨道大约需要 8 分钟(0.13 小时),因此请将其用作参数:

arrival_time("Orbit", hours=0.13)
Orbit Arrival: Thursday 14:11