Argumentos Apenas Nomeados (Keyword-only Arguments)
Por vezes, quer especificar argumentos para uma função pelo seu nome - tornando claro o que cada argumento representa, independentemente da sua posição. Em Python, esses argumentos são referidos como argumentos nomeados (keyword arguments). Os argumentos apenas nomeados (keyword-only arguments) são semelhantes, mas com uma particularidade especial: só podem ser fornecidos pelo nome (keyword), nunca pela posição.
Para definir uma função com argumentos apenas nomeados, utiliza-se o símbolo * na assinatura da função. Qualquer argumento que apareça depois de * só pode ser fornecido pelo seu nome.
Considere uma função para calcular a área de um retângulo. Requer dois argumentos: comprimento e largura. Adicionalmente, pode aceitar um argumento booleano opcional, rounded, para decidir se deve retornar a área exata (com decimais) ou a área arredondada (sem decimais). Queremos que rounded seja um argumento apenas nomeado, para evitar confusões ao chamar a função:
def rectangle_area(length, width, *, rounded=False):
area = length * width
return round(area) if rounded else area
print(rectangle_area(5.3, 4.2)) # Imprime 22.26, rounded não foi fornecido, portanto assume o valor padrão False
print(rectangle_area(5.3, 4.2, rounded=True)) # Imprime 22, rounded foi fornecido e definido como True
print(rectangle_area(5.3, 4.2, True)) # Erro! rounded deve ser fornecido pelo nome.
print(rectangle_area(5.3, 4.2, False)) # Erro! rounded deve ser fornecido pelo nome.
print(rectangle_area(length=5.3, width=4.2, rounded=True)) # Imprime 22
Podemos chamar esta função usando argumentos posicionais para comprimento e largura, e um argumento nomeado para rounded. Se alguém tentar fornecer o terceiro argumento por posição, ocorre um erro.
Note que ainda pode usar a sintaxe de argumentos nomeados para os argumentos posicionais, se desejar, já que eles não estão definidos como apenas posicionais aqui.
Desafio: Repetir o Texto
A sua tarefa é escrever uma função repeat_text que repete um texto especificado um certo número de vezes. A função deve receber dois argumentos: text e times. O argumento text é a string de texto a ser repetida e times é o número de repetições.
O argumento times deve ser um argumento apenas nomeado com um valor padrão de 1, o que significa que, se o argumento times não for fornecido, a função deve retornar o texto original como está.
A função deve retornar uma string que é o texto repetido times número de vezes.
A primeira linha da entrada contém uma string text. A segunda linha contém um inteiro times.
A função deve retornar uma string que é o text repetido times número de vezes.
Entrada
Saída
Hello World!
3
Hello World!Hello World!Hello World!
Nota: Não há espaço ou qualquer outro delimitador entre os textos repetidos na saída.