Já trabalhamos com funções em Python. Na verdade, nosso primeiro programa já usava uma função. print() é, na verdade, uma função. min(), max(), input(), sorted(), e todos os outros comandos com parênteses são funções.
As funções executam vários comandos e, em alguns casos, retornam um resultado. min() calcula o mínimo de vários valores e retorna esse valor. print(), por outro lado, imprime um valor na saída.
As funções são especialmente úteis para eliminar códigos repetitivos. Podemos também definir nossas próprias funções personalizadas. Imagine que você queira imprimir um certo objeto 3 vezes e fazer algo diferente entre as impressões:
Para definir uma função personalizada, é preciso usar a palavra-chave def seguida pelo nome da função (print_triangle no nosso caso), seguida por () e um : para marcar o início do bloco da função. A lista de comandos que a função deve executar é colocada em um bloco indentado dentro do corpo da função.
Ambos os programas executam exatamente as mesmas operações, mas o segundo define a parte repetitiva em uma função e garante que o código não seja copiado e colado.
Por outro lado, o primeiro tem muito código duplicado, e se decidirmos mudar o * para % ao imprimir um triângulo, seria necessário fazer muitas alterações e revisar cada linha para fazer a mudança. Isso pode ficar realmente confuso em códigos maiores e é muito propenso a erros.
Desafio
Defina uma função que imprime um retângulo de 10 × 12 e a chame 3 vezes. As bordas do retângulo devem ser feitas com o símbolo #, e a parte interna deve ser vazia.