Enviar um café pro programador

Passagem de Argumentos por Valor em Funções

Nesta aula de nosso Curso de Python, vamos aprender um pouco mais sobre argumentos, parâmetros e funções, especificamente sobre um troço chamado passagem por valor.

Tutorial anterior: Parâmetro e Argumento em Funções

Valores de Argumentos e Parâmetros

No tutorial passado, aprendemos o que são parâmetros e argumentos, e como usar eles em nossas tão amadas e queridas funções em Python.

Vimos que para podermos passarmos dados para funções, estas precisam ser declaradas com parâmetros apropriados, aí enviamos as informações como argumentos.





Mas vamos te mostrar um teste bem interessante, para te explicar melhor o que é passagem por valor.

No exemplo a seguir, no escopo geral, declaramos uma variável var com o valor de 1. Em seguida, passamos ela pra função muda, que vai mudar o valor da variável de 1 para 0.

Após a função terminar, voltamos para o escopo geral e imprimimos a variável novamente, para saber que valor ela tem. Veja o código:

def muda(var):
    var=0
    print("Valor de x dentro da função:  ",var)
    
var=1
print("Valor de x antes da função:   ",var)
muda(var)
print("Valor de x ao sair da função: ",var)


O resultado é o seguinte:
Curso de Python online grátis

Olha que curioso!
O valor de var começa com 1. Mandamos essa variável via argumento para a função, lá dentro ela muda para 0.

Quando essa função termina, imprimimos novamente var, ele voltou a ser 1!

Bugou o Python ?!
Calma, vamos entender melhor o que está acontecendo.

Passagem por Valor em Python

O que ocorre é o seguinte:
Quando enviamos um argumento para uma função, ela vai ficar apenas com o valor dessa variável.




Ela vai copiar esse valor para outra variável.
Embora passemos a variável var para a função, e dentro da função ela use uma variável de nome var, são duas variáveis totalmente diferentes, armazenadas em locais diferentes na memória.

O Python pensa assim:
"Olá, sou uma função marota.
Opa, fui invocada, me chamaram, vou lá trabalhar.

Me enviaram aqui um argumento, uma tal de var, vou copiar o valor que tá armazenado nela (1) para minha própria variável var. Pronto, copiado.

To nem aí pra essa outra variável var aí, fora do meu escopo. Pra mim, ela nem existe, só peguei a cópia dela, seu valor."

Ou seja, quando passamos informações, passamos, na verdade, somente o valor da variável. Por isso se chama passagem de argumento por valor.

Existe outra maneira de passar informações, chamada passagem por referência. Aí sim, passamos de fato a variável, o endereço dela da memória, então quando 'mexemos' nela dentro da função, o valor da variável original é realmente alterado.

Vamos aprender isso somente depois, por hora é importante você entender o que acontece quando enviamos um argumento para uma função e o que ela faz, de fato, por trás dos panos.

Aqui, no Curso Python Progressivo, é assim: você realmente aprende a linguagem, como ela funciona, o que as coisas realmente fazem.

Nada de decoreba sem sentido, aqui a gente entende as coisas.

2 comentários: