Funções

Contratos, retorno, argumentos, âmbito léxico, efeitos e decomposição de problemas.

TLDR

Perguntar sobre esta página

ChatGPTClaudePerplexityGrokGeminiCopiar e abrirDeepSeekCopiar e abrir

Definição e contrato

  • def quadrado(x): define uma função com parâmetro x; quadrado(5) chama-a com argumento 5. Definir não executa o corpo.
  • O contrato indica entradas, pré-condições e resultado, incluindo casos limite. Uma docstring documenta o contrato, sem o validar.
  • return termina a chamada e entrega um valor; print escreve e devolve None. Sair do corpo sem return também devolve None.
def e_primo(n):
    if n < 2:
        return False
    for divisor in range(2, n):
        if n % divisor == 0:
            return False
    return True
  • e_primo(1) é False pela guarda inicial; e_primo(2) é True porque o percurso é vazio; e_primo(9) é False no divisor 3. Um divisor basta para rejeitar; aceitar exige excluir todos.

Âmbito e argumentos

  • Uma lista escreve-se [1, 2]; [] é a lista vazia. xs.append(9) altera a própria lista; xs + [y] cria outra sem alterar xs.
  • Cada chamada tem os seus nomes locais. A procura segue o âmbito léxico: local, funções envolventes, módulo e nomes predefinidos. Não consulta as variáveis locais do chamador.
  • Atribuir a um nome no corpo torna-o local. Lê-lo antes da atribuição causa UnboundLocalError. global permite reassociar um nome do módulo; parâmetros e retorno evitam essa dependência.
  • O parâmetro refere o objeto recebido, sem cópia. Reatribuir o parâmetro só muda o nome local; xs.append(9) altera a lista partilhada com o chamador.
  • Uma função interior pode conservar acesso ao contexto envolvente depois do retorno: uma closure.
valor = 10

def dobrar(valor):
    return 2 * valor

print(dobrar(4), valor)  # 8 10

Valores por defeito

  • def potencia(base, expoente=2): admite potencia(3) e potencia(base=3, expoente=4). Os valores por defeito calculam-se quando def executa, não em cada chamada.
  • Uma lista por defeito fica partilhada entre chamadas. Usa None como sinal e cria a lista no corpo:
def juntar(valor, valores=None):
    if valores is None:
        valores = []
    return valores + [valor]
  • juntar(1) e juntar(2) devolvem [1] e [2]. A concatenação conserva qualquer lista recebida; is None é o teste de identidade apropriado aqui.

À tua maneira

Aparência

Modo de cor
Tema
Cor de destaque

Leitura

Fonte de leitura

Álgebra, lógica e uma ideia de cada vez.

Código

Fonte do código

Navegação

Cursor de leitura, sem edição. h, j, k, l movem; / pesquisa nesta página. v seleciona caracteres; V seleciona linhas; y copia. Tab permite destacar ou comentar. Espaço ou Enter abre blocos recolhíveis. Nos cartões, h, j, k, l mudam o foco.

CSS personalizado

Ativa uma sugestão ou guarda o teu CSS. Só muda este navegador.

Usa --page, --text e --accent para acompanhar o tema.

Seletores e recuperação

.site-header, .prose, .course-card, [data-reading-history], [data-playground] e .page-actions.

Abre a aparência com a tecla vírgula ou no rodapé. Se o CSS esconder os controlos, abre esta página sem CSS personalizado.

Pesquisar

Escreve para pesquisar em todo o site.

para escolher · Enter para abrir · Esc para fechar

Copiar fórmula

A cópia automática não está disponível. Copia o LaTeX abaixo.

Pesquisar nesta página

Enter procura · n / N repetem · Esc cancela. Ctrl / Cmd K pesquisa todo o site.

Atalhos de teclado

Clica numa tecla para a mudar. Esc cancela. Backspace desativa.

PesquisarCtrl / Cmd K

Os atalhos não interferem enquanto escreves. Tab e Enter funcionam sempre.