Empresas
Empregos
  • Sobre nós
  • Soluções
    • Publicação de vagas
      Publique sua vaga e receba candidatos qualificados em 48h.
    • Avaliações de candidatos
      Mais de 500 testes técnicos e psicológicos, mais anti-fraude.
    • Headhunting
      Busca executiva personalizada do início ao fim.
    • Folha de Pagamento + EOR
      Dispersão de folha e EOR em mais de 15 países da LATAM.
  • Preços
  • Empregos

0

154
Visualizações
¿Pueden una función y una variable local tener el mismo nombre?

He aquí un ejemplo de lo que quiero decir:

 def foo(): foo = 5 print(foo + 5) foo() # => 10

El código no produce ningún error y funciona perfectamente. Esto contradice la idea de que las variables y las funciones no deberían tener el mismo nombre a menos que las sobrescriba. ¿Por qué funciona? Y cuando se aplica al código real, ¿debería usar diferentes funciones/nombres de variables locales, o está perfectamente bien?

over 4 years ago · Santiago Trujillo
3 Respostas
Responde à pergunta

0

foo = 5 crea una variable local dentro de su función. def foo crea una variable global. Es por eso que ambos pueden tener el mismo nombre.

Si hace referencia a foo dentro de su función foo() , se está refiriendo a la variable local. Si hace referencia a foo fuera de esa función, se está refiriendo a la variable global.

Dado que evidentemente causa confusión para las personas que intentan seguir el código, probablemente no debería hacer esto.

over 4 years ago · Santiago Trujillo Relatório

0

Algo que nadie más ha mencionado todavía: Python es un lenguaje dinámico , con muy poca verificación estática. Así que cuando escribes

 def foo(): foo = 5 print(foo + 5)

es posible que haya estado pensando en eso como una "contradicción": ¿cómo puede foo ser una función y una variable entera al mismo tiempo? La respuesta de primer orden es "Son dos foo s diferentes", porque el foo interno es solo una variable local, sin relación con el nombre global foo . ¡Pero hágalo global y el código seguirá funcionando!

 def foo(): global foo foo = 5 print(foo + 5) foo() # OK, prints 10

¡En este código solo hay un foo ! Sin embargo, no es "tanto una variable como una función". Primero, en las líneas 1 a 4, definimos foo como una función con cierto cuerpo, pero aún no ejecutamos ese cuerpo. Después de la línea 4, el foo global tiene una función. Luego, en la línea 6, llamamos a la función a la que se refiere foo , que ejecuta su cuerpo. Lo primero que hace el cuerpo es asignar 5 a foo ... y ahora foo contiene un número entero. Al ejecutar un código que asigna un nuevo valor a foo , hemos cambiado el valor de foo . Solía ser esa-función-allí; ahora es 5. En un lenguaje de escritura dinámica como Python, no hay nada de malo en esto.

 def foo(): global foo foo = 5 print(foo + 5) foo() # OK, prints 10 (and incidentally assigns a new value to foo) foo() # Raises TypeError: 'int' object is not callable
over 4 years ago · Santiago Trujillo Relatório

0

La respuesta es sí. Las funciones son objetos de primera clase en Python. No existe una diferencia fundamental entre la función foo y la variable foo . Ambos son referencias a la memoria y ambos tienen un alcance, por lo que ambos son equivalentes a una variable. Si ha definido foo como una función y luego no la sobrescribe localmente, será como una variable global (tomada del ámbito de nivel superior):

 def foo(): print(foo)

y luego, si lo sobrescribe con una variable local, solo definirá una variable local dentro del alcance de la función:

 def foo(): foo = 3 print(foo)

En Python, cada referencia (variable) se puede sobrescribir durante la vida útil de un ámbito en particular. Puedes probar:

 def foo(): pass foo = 3

Esto sobrescribirá el valor de foo y apuntará ahora a 3 en lugar de la función foo en la memoria.

over 4 years ago · Santiago Trujillo Relatório
Responde à pergunta
Encontrar trabalhos remotos

Descubra a nova forma de encontrar um emprego!

melhores empregos
Principais categorias de trabalho
Empresas
Postar vaga Preços Comercial
Jurídico
Termos e Condições Política de privacidade
© 2026 PeakU Inc. All Rights Reserved.
Andres GPT
Recomende algumas ofertas para mim
Preciso de ajuda