Usar argumentos de palavra-chave no Python

Concluído

Os argumentos opcionais exigem que um valor padrão seja atribuído a eles. Esses argumentos designados são chamados de argumentos de palavra-chave. Os valores dos argumentos de palavra-chave devem ser definidos nas próprias funções. Quando você chama uma função definida com argumentos de palavra-chave, não é necessário especificar esses parâmetros.

A missão Apollo 11 demorou cerca de 51 horas para chegar à Lua. Vamos criar uma função que retorna o tempo estimado de chegada usando o mesmo valor da missão Apollo 11 como padrão:

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")

A função usa o módulo datetime para determinar a hora atual. Ela usa timedelta para permitir a operação de adição que resulta em um novo objeto de hora. Depois de computar esse resultado, ele retorna a estimativa de arrival formatada como uma cadeia de caracteres. Tente chamá-la sem argumentos:

arrival_time()
Arrival: Saturday 16:42

Embora a função defina um argumento de palavra-chave, ela permite ser chamada sem passar nenhum argumento. Nesse caso, a variável hours adota o valor padrão 51. Para verificar se a data atual está correta, use 0 como o valor para hours:

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

Combinação de argumentos comuns e argumentos de palavra-chave

Às vezes, uma função precisa de uma combinação de argumentos comuns e argumentos de palavra-chave. No Python, essa combinação segue uma ordem específica. Os argumentos comuns devem ser sempre declarados primeiro, seguidos pelos argumentos de palavra-chave.

Atualize a função arrival_time() para receber um argumento obrigatório, que é o nome do destino:

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")

Como você adicionou um argumento obrigatório, não é mais possível chamar a função sem argumentos:

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

Use "Moon" como o valor de destination para evitar o erro:

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

Você também pode passar mais de dois valores, mas é preciso separá-los por vírgula. Leva cerca de 8 minutos (0,13 horas) para chegar a órbita, portanto, use esse valor como argumento:

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