Olá Gabriel.
Otima pergunta.
Isso é muito relativo e varia de acordo com a equipe que está desenvolvendo o projeto.
Vamos analisar com calma o que acontece no seu código:
def acertar_idade(ano_atual, ano_nascimento):
return ano_atual - ano_nascimento
ano_nascimento = int(input("Em que ano você nasceu? "))
ano_atual = int(input("Qual o ano atual? "))
somar = acertar_idade(ano_atual, ano_nascimento)
print(f"Você tem {somar} de idade")
Você usou os mesmos nomes ano_atual e ano_nascimento tanto dentro da função quanto fora dela.
Mas isso não causa conflito porque:
- Os nomes dentro da função (
ano_atual, ano_nascimento) são parâmetros locais . Eles só existem dentro da função. - Os nomes fora da função (
ano_atual, ano_nascimento) são variáveis globais (no escopo principal do programa).
Quando você chama:
somar = acertar_idade(ano_atual, ano_nascimento)
O Python faz o seguinte:
- Pega o valor das variáveis de fora.
- Passa esses valores para dentro da função.
- Lá dentro, os parâmetros recebem cópias desses valores (ou referências, no caso de objetos mutáveis).
Mesmo que os nomes sejam iguais, o Python entende o contexto (escopo) de onde eles estão sendo usados.
Então:
- Fora da função:
ano_atual = valor digitado pelo usuário - Dentro da função:
ano_atual = parâmetro local usado no cálculo
Esses dois podem ter o mesmo nome, mas são variáveis diferentes.
Usar os mesmos nomes não é errado, mas às vezes pode confundir quem lê o código.
Uma boa prática é variar um pouco os nomes e de preferencia ir se habituando a utilizar o ingles.
Qualquer duvida comente ai .
Bons estudos.