Llamada de funciones de Python por referencia (duplicado)
En muchos lenguajes de programación, los parámetros se pueden pasar por valor o por referencia utilizando palabras reservadas específicas . Sin embargo, en Python, cuando se pasa un parámetro a una función, nunca modifica el valor de la variable original en la función que llama.
Ejemplo 1: llamada por valor
k = 2
def foo(n):
n *= n
return n
j = foo(k)
print(j) # 4
print(k) # 2
Aquí, el valor de k permanece sin cambios después de llamar a la función foo porque Python pasa argumentos por valor.
Ejemplo 2: llamada por global
Para modificar la variable en la función de llamada, se puede utilizar la palabra clave global.
n = 0
def foo():
global n
n *= n
return n
En este caso, la palabra clave global permite modificar n dentro de la función foo y su valor se actualizará en la función de llamada.
Pasar por referencia de objeto en Python
Python, sin embargo, no sigue estrictamente la llamada por valor o la llamada por referencia. En cambio, emplea un concepto llamado pasar por referencia de objeto.
En Python, las variables se refieren a objetos, no a los objetos en sí. Como tal, cuando se pasa una variable a una función, pasa una referencia al objeto, no al objeto en sí.
Por ejemplo:
def append_one(li):
li.append(1)
x = [0]
append_one(x)
print(x) # [0, 1]
En este código, la función append_one agrega 1 a la lista x. Dado que la lista se pasa por referencia de objeto, cualquier cambio realizado en la lista dentro de la función se reflejará en la función de llamada.
Pasar por referencia frente a pasar por referencia de objeto
En conclusión, Python sigue el paso por referencia de objeto, donde las variables se refieren a objetos más que los objetos mismos. Esto permite que las funciones modifiquen los objetos que se les pasan, pero los cambios en las referencias de las variables en sí no se propagan a la función que llama.
Descargo de responsabilidad: Todos los recursos proporcionados provienen en parte de Internet. Si existe alguna infracción de sus derechos de autor u otros derechos e intereses, explique los motivos detallados y proporcione pruebas de los derechos de autor o derechos e intereses y luego envíelos al correo electrónico: [email protected]. Lo manejaremos por usted lo antes posible.
Copyright© 2022 湘ICP备2022001581号-3