As funções em Python têm um grande número de recursos extras que tornam a programação mais simples. Considerando tais funções, assinale a afirmativa correta.
- A)O comando nonlocal não pode ser usado em funções simples.
Errada, porque nonlocal pode ser usado dentro de funções aninhadas para referir variáveis do escopo externo imediato.
- B)A característica principal das funções geradores é que elas não usam expressões yield.
Errada, porque funções geradoras são justamente caracterizadas pelo uso de yield.
- C)Os closures são funções que fazem referência a variáveis a partir do escopo em que foram definidas.
Certa, pois closures são funções que mantêm referência a variáveis do escopo em que foram definidas.
- D)Com o objetivo de eliminar diversos problemas, o programador, sempre que possível, deverá usar None como valor de retorno em uma função.
Errada, porque None não deve ser usado sempre como retorno; isso depende da lógica da função e do resultado esperado.
Gabarito: C
Em Python, funções podem carregar alguns truques bem úteis, e isso costuma aparecer em prova. Entre eles estão os closures, os geradores e palavras-chave como nonlocal, que ajudam a controlar o alcance das variáveis. A ideia central aqui é entender o que cada recurso faz de verdade, sem cair em nome bonito com conceito trocado. Um closure acontece quando uma função interna “lembra” de variáveis do escopo externo em que foi criada. Ou seja, mesmo depois que a função externa termina, a função interna ainda consegue usar aquelas variáveis capturadas. É exatamente isso que a alternativa C descreve: uma função que faz referência a variáveis do ambiente onde foi definida. Já os geradores em Python existem justamente por usarem a instrução yield, e não por evitarem ela. O nonlocal também é permitido em funções internas, para indicar que uma variável vem do escopo imediatamente externo da função, então não faz sentido dizer que ele não pode ser usado em funções simples de forma absoluta. E quanto ao retorno, usar None não é uma regra universal para “eliminar problemas”; muitas funções retornam valores úteis, e None é apenas um valor possível quando não há retorno explícito. Então, a banca quer testar se você reconhece o conceito de closure: a função guarda acesso ao contexto em que nasceu. É um clássico de Python, daqueles que parecem detalhe, mas caem quando a questão quer separar quem decora de quem entende.