Funções com Número Arbitrário de Argumentos em Python
Entender como as variáveis são passadas em Python pode ser um pouco complicado, especialmente se você vem de um background em outras linguagens de programação. O conceito de passar uma variável por referência em Python ou por valor é um pouco diferente. Vamos explorar como o Python lida com a passagem de variáveis e como você pode alcançar o efeito de passar por referência.
Em Python, os argumentos são passados por atribuição, o que significa que a função recebe uma referência ao objeto, mas a referência em si é passada por valor. Isso tem duas implicações:
Vamos olhar um exemplo usando uma lista, que é um tipo mutável:
def tentar_mudar_conteudo_da_lista(a_lista):
print('recebido', a_lista)
a_lista.append('quatro')
print('alterado para', a_lista)
lista_externa = ['um', 'dois', 'três']
print('antes, lista_externa =', lista_externa)
tentar_mudar_conteudo_da_lista(lista_externa)
print('depois, lista_externa =', lista_externa)TestarSaída:
antes, lista_externa = ['um', 'dois', 'três']
recebido ['um', 'dois', 'três']
alterado para ['um', 'dois', 'três', 'quatro']
depois, lista_externa = ['um', 'dois', 'três', 'quatro']Como você pode ver, a função foi capaz de modificar o conteúdo de lista_externa porque listas são mutáveis.
Agora, vamos ver o que acontece com strings, que são imutáveis:
def tentar_mudar_referencia_da_string(a_string):
print('recebido', a_string)
a_string = 'Em um reino junto ao mar'
print('definido como', a_string)
string_externa = 'Era muitos e muitos anos atrás'
print('antes, string_externa =', string_externa)
tentar_mudar_referencia_da_string(string_externa)
print('depois, string_externa =', string_externa)TestarSaída:
antes, string_externa = Era muitos e muitos anos atrás
recebido Era muitos e muitos anos atrás
definido como Em um reino junto ao mar
depois, string_externa = Era muitos e muitos anos atrásA função não pôde alterar a string original porque strings são imutáveis.
Se você quiser simular o comportamento de passar uma variável por referência com objetos imutáveis em Python, você pode usar um objeto embrulho como uma lista:
def usar_um_embrulho_para_simular_passagem_por_referencia(coisa_a_mudar):
coisa_a_mudar[0] = 'Alterado'
embrulho = ['Original']
usar_um_embrulho_para_simular_passagem_por_referencia(embrulho)
print(embrulho[0]) # Saída: AlteradoTestarUsando uma lista para embrulhar a string, você pode alterar a lista para refletir as mudanças.
Em Python, passamos variáveis para funções por atribuição, o que significa que a função recebe uma referência ao objeto, não o próprio objeto em si. Podemos alterar objetos mutáveis dentro da função, afetando o objeto original. Entretanto, não podemos alterar objetos imutáveis, mas você pode simular a passagem por referência usando um objeto embrulho mutável. Entender esses conceitos ajudará você a manipular variáveis em Python de forma mais eficaz.
Aprenda a programar e desenvolva soluções para o seu trabalho com Python para alcançar novas oportunidades profissionais. Aqui na Asimov você encontra:
Comentários
30xp