3
respostas

[Dúvida] Não entendi como a função "deposita", altera o valor ada variável origial, sem ao menos ter um return

def criar_conta(numero, titular, saldo, limite): conta = {"numero":numero, "titular": titular, "saldo": saldo, "limite": limite} return conta

def deposita(conta, valor): conta["saldo"] += valor

def saca(conta, valor): conta["saldo"] -= valor

def extrato(conta): print("Saldo {}".format(conta["saldo"]))

3 respostas

Boa noite, Ryan!

A função de deposita recebe como parâmetro "conta" que é a conta que desejamos depositar algo.

Exemplo:

conta_do_gustavo = criar_conta(14, "Gustavo", 0, 1000)
deposita(conta_do_gustavo, 500)
print(conta_do_gustavo["Saldo"]) # Saída = 500

Por isso não precisamos de um return. O deposita sabe que a conta que deve receber o depósito é a conta_do_gustavo, pois ela foi passada como parâmetro.

Caso tenha fica alguma dúvida, pode escrever que lhe ajudo!

Até! Bons estudos!

Eu entendi esse parte, mas gostaria de entender como o valor alterado dentro da função, altera o valor de fora, sem ao menos ter um return.

Isso é bom conta da passagem por referência. Isso não completamente explícito no python como em outras linguagens, mas existem duas formas de passar um valor a um método: passagem por valor e por referência.

Ao passar o valor estamos enviando uma cópia do valor para dentro da função. Ex:

def soma(a, b):
    return a+b


numero1 = 3
numero2 = 5
print(soma(numero1, numero2)) # Exibirá o retorno da função, 8

Nesse caso acima os parametros a,b recebem os valores 3 e 5. Foram passados os valores.

Na passagem por referência é enviado o endereço de memória onde numero1 e numero2 estão. Isso significa que ao alteramos a e b dentro da função estamos alterando no endereço de memória, ou seja, no mesmo lugar que numero1 e numero2 estão. As estruturas não primitivas são passadas por referência automaticamente, como listas, dicionários e objetos (há outras). As estruturas primitivas, como string, int ou float são passados por valor. Estrutura primitiva é aquela que possui um item do tipo dela. Ex: Uma variável inteira possui um inteiro dentro. Uma do tipo string possui uma string dentro. Estrutura não primitiva é aquela que quebra isso. Ex: Um dicionário pode possuir inteiros, string, float, lista e até outros dicionários. Uma lista pode ser de inteiros, strings ou ambos.

Na linguagem C isso é mais explícito com a ideia de ponteiros. Vou deixar aqui links sobre o tema em python e também em C para você poder ler um pouco.

https://www.guj.com.br/t/funcao-de-python-altera-variavel-fora-de-seu-escopo/343819/3

https://acervolima.com/passe-por-referencia-vs-valor-em-python/

http://linguagemc.com.br/ponteiros-em-c/

Se ficar algumas dúvida, pode comentar aqui que tento melhorar a explicação!

Até!