3
respostas

Parametros

Estou com uma dúvida em um determinado trecho da aula foi criado algumas funções que tiveram alguns valores de parâmetros que necessitavam de ser inseridos. Estes parâmetros foram colocados entretanto eu não entendi uma coisa, venho da linguagem C, essas variáveis deveriam entrar na função como ponteiros para que dentro da função criadas elas fossem atualizadas e isso não ocorreu

def marca_chute_correto(chute,letras_certas,palavra_secreta):
    index = 0
         for x in palavra_secreta:
             if x == chute:
                    letras_certas[index] = x
            index += 1
3 respostas

Tarcísio, tudo bom?

Dá uma olhada nesse artigo que vai te explicar sobre os (não) ponteiros em Python assim como objetos mutáveis e imutáveis. A explicação é meio longa, então é melhor deixar com os especialistas.

https://realpython.com/pointers-in-python/

Não, não eu entendi muito claramente, uma parte do texto já foi muito direto pelo menos acho que entendi.

Salvo engano sua dúvida tem a ver com passagem por valor e por referência. Pelo que me lembro de C, ao usar ponteiros você está fazendo com o que alterações feitas internamente na função se reflitam na versão original das 'variáveis'.

O comportamento em python depende se o dado é mutável ou não... SE NÃO ME ENGANO, parâmetros imutáveis são passados por valor (ou seja é feita uma 'cópia' do valor, sem referência à variável principal. E objetos mutáveis são passados por referência. Leia o código abaixo e imagine o resultado:

def func(x, y):
    x = x + 1
    y.append(4)

x = 1
y = [1, 2, 3]
func(x, y)
print 'x:', x
print 'y:', y

O resultado é:

x: 1
y: [1, 2, 3, 4]

Ou seja o int é imutável e a lista mutável. Parece estranho dizer que o int é imutável, mas isso é verdade. Na verdade as variáveis em python 'geralmente' se comportam como ponteiros em C, mas quando você altera uma variável como int aquele ponteiro automaticamente aponta para uma posição de memória (com o novo valor).

Esse artigo aqui explica em detalhes: https://pythonhelp.wordpress.com/2013/02/20/variaveis-valores-e-referencias/