Python: funciones de invocación con y sin paréntesis

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_stringie 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_stringes una función dentro de la función concatenate_stringy la función principal ( concatenate_string) devuelve la subfunción ( merge_string) a la persona que llama.

 return merge_string(string1, string2) 

Here merge_stringse invoca con paréntesis, por lo tanto, se ejecuta y proporciona el resultado concatenate_stringdesde 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_stringse usa sin paréntesis, concatenate_stringpasa la referencia de la función al invocable funcen 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_stringse pasa a function_callcomo argumento.

function_call(concatenate_string)

Dentro de function_call, ejecuta el concatenate_stringuso 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

Deja una respuesta

Tu dirección de correo electrónico no será publicada. Los campos obligatorios están marcados con *