Enviar um café pro programador

Mostrando postagens com marcador Parâmetro. Mostrar todas as postagens
Mostrando postagens com marcador Parâmetro. Mostrar todas as postagens

Argumento Posicional e Argumento Nomeado em Funções Python (keyword arguments)

Neste tutorial de nossa Apostila de Python online grátis, vamos falar sobre duas maneiras diferentes de passar argumentos para funções:
  1. Posicional
  2. Nomeada (keywords arguments)

Tutorial Anterior: Passagem por valor
Importante ler: Como Ganhar Dinheiro Programando em Python


Argumento Posicional em Python

Nos tutoriais e exemplos usados até o momento em nossa apostila, fizemos uma relação entre parâmetros e argumentos.

Por exemplos, se definimos a função:
def fu_bar(par1, par2, par3)

E depois chamamos ela passando os argumentos:
fu_bar(4,5,6)

Quer dizer que, na função fu_bar, os parâmetros receberão os seguintes valores:
  • par1 = 4
  • par2 = 5
  • par3 = 6

Ou seja, na ordem. O primeiro parâmetro recebe o primeiro argumento, o segundo parâmetro recebe o valor do segundo argumento, e assim sucessivamente.

Isso é chamado de argumento posicional, por motivos óbvios. E existe somente essa maneira de relacionar os valores de parâmetros com os valores enviados como argumentos.

Porém, o Python é uma linguagem absurdamente flexível e poderosa, então, existem mais maneiras de um parâmetro receber um valor de argumento, quando se usa vários.

Argumentos Nomeados em Python

Para ilustrar melhor, vamos criar uma função que recebe 3 notas diferentes: mat, fis e qui, notas de um aluno em Matemática, Física e Química e exibe sua média:



def media(mat,fis,qui):
    media = (mat+fis+qui)/3
    print("Media: ", media)


Ao chamar essa função, podemos passar os seguintes argumentos:
media(8, 9, 10)

Sabemos que as notas serão:
  • mat = 8
  • fis = 9
  • qui = 10

Porém, existe uma outra maneira de passar os argumentos, em outra ordem, basta nomear o argumento com o nome do parâmetro que desejar, veja:
  • media(qui=10, mat=8, fis=9)

Prontinho. O resultado é exatamente o mesmo.
As maneiras seguintes também exibem o mesmo resultado:
  • media(qui=10, fis=9, mat=8)
  • media(fis=9, mat=8, qui=10)

Ou seja, não importa a ordem se você usar argumentos nomeados!
Aliás, dá até pra misturar argumentos nomeados com argumentos posicionais.

Regra para Argumentos Nomeados e Posicionais

O que acha que vai ocorrer se usar:
  • media(8, fis=9, qui=10) ?

O que diz sua intenção? Lembre-se: Python é uma linguagem bem intuitiva.
Sim: o 8 vai ser atribuído ao primeiro parâmetro, que na definição da função é mat, e vai ter o mesmo resultado.



Mas existe uma importante regra que deve ser obedecida:
  • Argumentos posicionais devem vir antes
Se fizer:
media(8, fis=9, 10)

Vai dar erro. Todos os argumentos posicionais devem vir antes. No caso, tentamos usar no primeiro argumento e no terceiro, vai dar erro, não pode!

Porém você pode fazer:
media(8, 9, qui=10)

Os argumentos que não são nomeados, são automaticamente chaveados de maneira sequencial, posicional, com a ordem dos parâmetros. Bem intuitivo, não acha?

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.