Enviar um café pro programador

Mostrando postagens com marcador Argumento. Mostrar todas as postagens
Mostrando postagens com marcador Argumento. Mostrar todas as postagens

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.

Argumentos e Parâmetros nas Função em Python

Neste tutorial de Python, vamos te explicar o que são argumentos e parâmetros, para que servem, como funcionam e como usar, um dos assuntos mais importantes desta seção de funções em Python.

Tutorial Anterior: Variável Local em Python
Veja também: Como se tornar programador profissional em Python




Argumentos e Parâmetros em Funções Python

No tutorial anterior, falamos das variáveis locais, no caso, dentro de funções.
Vimos que quando declaramos e usamos uma variável dentro de uma função, ela não é 'vista' do lado de fora.

Se tentar imprimir ou usar uma variável que está dentro do escopo de uma função, não vai conseguir. Nem o contrário, se estiver dentro de uma função, não vai conseguir usar variáveis e dados que estão fora da função.

Porém, isso contradiz o que falamos de funções, no início de nossos estudos sobre esse assunto, pois lá explicamos que elas se comunicam entre si, recebem dados, fazem tarefas específicas e retornam dados, ou seja, se comunicam.

Então, vamos aprender agora como fazer para funções se comunicarem com o mundo externo. Uma das maneiras de comunicação é através do uso de argumentos e parâmetros.

  • Argumento

Argumento nada mais é que uma informação que passamos para uma função, quando chamamos ela. Enviamos dados (objetos) quando invocamos a função, e ela vai poder usar essas informações do jeito que quiser.

  • Parâmetro

Quando você vai definir uma função e deseja que ela receba dados, você precisa definir parâmetros nessa função, um ou mais parâmetros. Uma forma de dizer que aquela função só funciona se receber determinadas informações (parâmetros).

Argumento e Parâmetro - Como Usar

Lembra quando ensinamos a declarar uma função?
Usamos a palavra-chave def, depois damos o nome da função e parêntesis?
E dentro desses parêntesis não tinha nada?




Pronto, agora a diferença vai vir aí.
Dentro desses parêntesis é que a magia vai ocorrer.

A nova definição é:

def nome_da_funcao(parametro1, parametro2, parametro3,...)
    código da função
    código da função
    código da função

Você pode usar quantos parâmetros quiser: um, dois, três...basta especificar na definição da função, o número de parâmetros que ela vai receber.
 
E para invocar, chamar essa função, você deve fazer:
nome_da_funcao(argumento1, argumento2, argumento3,...)

Ou seja, se a função foi declarada como tendo 'x' parâmetros, devemos passar 'x' informações, ou seja, 'x' argumentos ao invocar a função.

Exemplo de Função com Parâmetro

A função seguinte recebe um parâmetro, vamos chamar ele de x, em seguida mostra o dobro desse valor:

def dobro(x):
    dobro = 2*x
    print("Dobro =",dobro)


Para invocar essa função, precisamos fornecer um valor, por exemplo:
dobro(1)

Iremos ver a mensagem na tela: Dobro = 2
Neste caso, x é um parâmetro, pois está definido na função.
Já o valor 1 que passamos, é o argumento.

Vários Argumentos e Parâmetros

Você pode passar para uma função quantas informações desejar.
Pode passar 1 argumento, dois, dez, mil, 1 milhão... o que quiser.

Só é necessário fazer uma coisa: ao definir a função, deixar bem claro no cabeçalho dela quantos argumentos ela vai receber, colocando o número correto de parâmetros, bem como seus nomes e separados por vírgulas.




Por exemplo, a função a seguir vai receber dois argumentos, pois foi definida com dois parâmetros, x e y:

def soma(x,y):
    soma = x + y
    print("Soma =",soma)


Ela recebe dois argumentos e exibe a soma deles.

Na hora de invocar a função, devemos passar duas informações, ou seja, dois valores, dois argumentos, pois foi assim que a função foi definida, para receber dois dados! Por exemplo:
  • soma(1,2)
  • soma(-1,1)
  • soma(21,12)

Se ela foi definida com n número de parâmetros, ela deve receber n número de argumentos, mais ou menos que isso, dará erro na sua função. Ok?

Exemplo de Função com Parâmetro e Argumento

Crie um programa que peça ao usuário dois valores. Estes números deverão ser repassados para uma função chamada calculadora, que vai mostrar a soma, subtração, divisão e multiplicação desses números.

Nossa função deve ter dois parâmetros. Vamos chamar eles de x e y.
Fora da função, vamos pedir dois números ao usuário e armazenar nas variáveis primeiro e segundo.

Em seguida, passamos essas variáveis como argumentos, para a função calculadora. Veja como ficou nosso código:

def calculadora(x,y):
    print("Soma          =",x+y)
    print("Subtração     =",x-y)
    print("Divisão       =",x/y)
    print("Multiplicação =",x*y)
    
primeiro = float(input("Primeiro número: "))
segundo  = float(input("Segundo número: "))

calculadora(primeiro,segundo)

Nomes de Parâmetros e Argumentos

Note uma coisa extremamente importante no exemplo anterior:
Passamos as variáveis primeiro e segundo como argumentos.

Porém, ao chegar na função calculadora, ela vai tratar esses valores com outros nomes de variáveis: x e y.

Na definição da função, os nomes dos parâmetros são x e y, então dentro da função, serão tratados apenas como x e y, embora tenha passado (1,2) ou (primeiro,segundo) ou (jose,joao) como argumento.

O nome dos argumentos não importa, vão virar o nome dos parâmetros, que você deixou bem claro ao definir sua função.

Exercício Resolvido de Funções com Parâmetros e Argumentos

Crie um script em Python que pede uma frase (string) ao usuário e em seguida um caractere. Em seguida, seu script deve dizer quantas vezes aquele caractere apareceu na frase digitar. Use função com parâmetros.

Primeiro, vamos definir nossa função, a conta_caractere.
Ele deve ter dois parâmetros o texto, que é uma string e char que é um caractere.

Vamos usar a variável interna count para contar quantas vezes char aparece na string texto, usamos um laço while para fazer isso, e cada vez que encontra, o contador é incrementado em uma unidade.

Usamos um laço for de uma maneira bem interessante, vejam:

def conta_caractere(texto,char):
    count = 0
    for letra in texto:
        if letra == char:
            count += 1
    print(char,"apareceu",count,"vezes na string")
    
string=input("Digite um texto qualquer: ")
caractere = input("Digite um caractere: ")

conta_caractere(string,caractere)


Os dados solicitados ao usuários foram armazenados nas variáveis string e caractere, que foram passadas como argumentos para a função conta_caractere. Simples, não?

Exercícios Propostos

01. Crie uma função que recebe um número e exiba seu quadrado.
02. Crie uma função que recebe um valor e exiba seu cubo.
03. Crie uma função que recebe 4 notas de um aluno, e exiba a média dele.
04. Crie uma função que recebe 3 números e exiba o maior deles.