Las funciones en Python son los bloques de código definidos que realizan una tarea específica. En esta sección, discutiremos la diferencia entre invocar funciones con y sin paréntesis.
- Cuando llamamos a una función con paréntesis , la función se ejecuta y devuelve el resultado al invocable.
- En otro caso, cuando llamamos a una función sin paréntesis , se envía una referencia de función al invocable en lugar de ejecutar la función en sí.
Analicemos 3 conceptos importantes:
- Funciones de invocación
- Funciones de retorno
- Pasar funciones
Funciones de invocación –
La siguiente función realiza una tarea simple, concatenación de strings. Aquí invocaremos la función `concatenate_string` con y sin paréntesis y veremos la diferencia.
def concatenate_string(*args): string1 = args[0] string2 = args[1] return string1 + string2 obj = concatenate_string('Hello, ', 'George') print('Function call with Parentheses: ') print(obj) obj = concatenate_string print('Function call without Parentheses: ') print(obj)
Producción
Function call with Parentheses: Hello, George Function call without Parentheses: <function concatenate_string at 0x7f0bb991df28>
Para el primer caso, cuando llamamos a concatenate_string('Hello, ', 'George')
, la función se ejecuta y devuelve la string concatenada.
Y, para el segundo caso, cuando llamamos a concatenate_string
ie sin paréntesis, se pasa una referencia al invocable en lugar de ejecutar la función en sí. Aquí el invocable puede decidir qué hacer con la referencia.
Funciones de retorno –
De la discusión anterior, puede comprender que, cuando se llama a la función con paréntesis, el código se ejecuta y devuelve el resultado. Y, cuando se llama sin paréntesis, se devuelve una referencia de función al invocable.
Entonces, ¿qué sucede cuando una función se codifica junto con una declaración de retorno con paréntesis y sin paréntesis? Veamos un ejemplo.
con paréntesis
def concatenate_string(*args): string1 = args[0] string2 = args[1] def merge_string(string1, string2): return string1 + string2 return merge_string(string1, string2) def func(): conc_obj = concatenate_string('Hello, ', 'George') print(conc_obj) func()
Producción
Hello, George
Del ejemplo anterior, está claro que merge_string
es una función dentro de la función concatenate_string
y la función principal ( concatenate_string
) devuelve la subfunción ( merge_string
) a la persona que llama.
return merge_string(string1, string2)
Here merge_string
se invoca con paréntesis, por lo tanto, se ejecuta y proporciona el resultado concatenate_string
desde donde se pasa el resultado a func
.
sin paréntesis
def concatenate_string(): def merge_string(string1, string2): return string1 + string2 return merge_string def func(): # return the reference of merge_string func conc_obj = concatenate_string() print(conc_obj) # prints the reference # executes the reference print(conc_obj('Hello, ', 'George')) func()
Producción:
<function concatenate_string..merge_string at 0x7f1e54ebc158> Hello, George
Dado que the merge_string
se usa sin paréntesis, concatenate_string
pasa la referencia de la función al invocable func
en lugar de ejecutar el merge_string
.
return merge_string
Por lo tanto, podemos concluir que cuando codificamos una subfunción con paréntesis en una declaración de devolución, la función principal ejecuta la subfunción y pasa el resultado a la llamada.
Y, cuando codificamos una subfunción sin paréntesis en una declaración de devolución, la función principal pasa la referencia de la subfunción a la llamada en lugar de ejecutarla. Aquí el invocable decide qué hacer con la referencia.
Funciones de paso –
Puede pasar una función como argumento creando la referencia, llamando a la función sin paréntesis y proporcionándola como argumento. Echemos un vistazo al código.
def concatenate_string(*args): string1 = args[0] string2 = args[1] def merge_string(string1, string2): return string1 + string2 # string merge # executes merge_string and return the result return merge_string(string1, string2) def function_call(function): string1 = 'Hello, ' string2 = 'George' return function(string1, string2) # passing function as argument print(function_call(concatenate_string))
Producción:
Hello, George
En este caso, la referencia de concatenate_string
se pasa a function_call
como argumento.
function_call(concatenate_string)
Dentro de function_call, ejecuta el concatenate_string
uso de la referencia y devuelve el resultado al invocable.
Publicación traducida automáticamente
Artículo escrito por SonuGeorge y traducido por Barcelona Geeks. The original can be accessed here. Licence: CCBY-SA