def f(y):
x = 2
print(f"x={x}, y={y}")
g(3)
def g(y):
x = 4
print(f"x={x}, y={y}")
Qual será a saída ao executar f(1)?
Resposta correta: A) x=2, y=1
x=4, y=3
Explicação: f tem seu próprio namespace (x=2, y=1). Dentro de f chama g(3), que cria outro namespace (x=4, y=3).
Resposta correta: C) Local → Global → Built‑ins
O interpretador procura primeiro no namespace local da chamada, depois no global (módulo) e, por fim, nos built‑ins.
example.py abaixo:
# example.py
def f():
print('f')
def g():
print('g')
x = 10
Se o módulo for importado com from example import *, qual será o conteúdo de dir() no módulo chamador?
Resposta correta: A) ['f', 'g', 'x']
O wildcard importa todos os nomes que não começam com “_”. Assim, f, g e x ficam no namespace do chamador.
def safe_open(nome, modo):
try:
arq = open(nome, modo)
return arq
except:
return None
f = safe_open('inexistente.txt', 'r')
if f is None:
print('Falha ao abrir')
else:
print('Arquivo aberto')
Qual é o comportamento correto desse código quando o arquivo não existe?
Resposta correta: B) Imprime “Falha ao abrir”.
Quando open falha, a exceção é capturada, safe_open devolve None e o if imprime a mensagem.