Definir funciones en Python

Avatar Tutor | octubre 16, 2018

Una función es un bloque de código organizado y reutilizable que se utiliza para realizar una única acción relacionada. Las funciones proporcionan una mejor modularidad para su aplicación y un alto grado de reutilización de código.

Como ya sabe, Python le brinda muchas funciones integradas como print (), etc., pero también puede crear sus propias funciones. Estas funciones se denominan funciones definidas por el usuario.

Definiendo una función

Puede definir funciones para proporcionar la funcionalidad requerida. Aquí hay reglas simples para definir una función en Python.

Los bloques de funciones comienzan con la palabra clave def seguida del nombre de la función y los paréntesis (()).

Cualquier parámetro o argumento de entrada se debe colocar dentro de estos paréntesis. También puede definir parámetros dentro de estos paréntesis.

La primera declaración de una función puede ser una declaración opcional: la cadena de documentación de la función o la cadena de documentación.

El bloque de código dentro de cada función comienza con dos puntos (:) .

La declaración return [expresión] es lo que sale de una función, opcionalmente devolviendo una expresión a la persona que la llama. Una declaración de retorno sin argumentos es lo mismo que void en java, y no devuelve nada.

Sintaxis

def functionname( parameters ):
   "function_docstring"
   function_suite
   return [expression]

De forma predeterminada, los parámetros tienen un comportamiento posicional y debe informarlos en el mismo orden en que se definieron.

Ejemplo

La siguiente función toma una cadena como parámetro de entrada y la imprime en la pantalla estándar.

def printme( str ):
   "Esto imprime un mensaje en la función"
   print str
   return

Llamando a una función

Definir una función solo le da un nombre, especifica los parámetros que se incluirán en la función y estructura los bloques de código.

Una vez que se finaliza la estructura básica de una función, puede ejecutarla llamando desde otra función o directamente desde el indicador de Python. A continuación se muestra el ejemplo para llamar a la función printme ():

#!/usr/bin/python

# Definición de la función
def printme( str ):
   "Esto imprime un mensaje en la función"
   print str
   return;

# Ahora puedes llamar a la función printme
printme ("¡Soy la primera llamada a la función definida por el usuario!")
printme ("De nuevo segunda llamada a la misma función")

Cuando se ejecuta el código anterior, produce el siguiente resultado:

¡Soy la primera llamada a la función definida por el usuario!
De nuevo segunda llamada a la misma función

Pasar por referencia vs valor

Todos los parámetros (argumentos) en el lenguaje Python se pasan por referencia. Significa que si cambia a qué se refiere un parámetro dentro de una función, el cambio también se refleja en la función de llamada. Por ejemplo

#!/usr/bin/python

# Definición de la función
def changeme( mylist ):
   "Esto cambia los valores de una lista en una función"
   mylist.append([1,2,3,4]);
   print "Valores dentro de la función: ", mylist
   return

# Ahora puedes llamar a la función changeme
mylist = [10,20,30];
changeme( mylist );
print "Valores dentro de la función: ", mylist

Aquí, mantenemos la referencia del objeto pasado y agregamos valores en el mismo objeto. Entonces, esto produciría el siguiente resultado:

Valores dentro de la función: [10, 20, 30, [1, 2, 3, 4]]
Valores fuera de la función: [10, 20, 30, [1, 2, 3, 4]]

Hay un ejemplo más donde el argumento se pasa por referencia y la referencia se sobrescribe dentro de la función llamada.

#!/usr/bin/python

# Definición de la función
def changeme( mylist ):
   "Esto cambia los valores de una lista en una función"
   mylist = [1,2,3,4]; 
   print "Valores dentro de la función: ", mylist
   return

# Ahora puedes llamar a la función changeme


mylist = [10,20,30];
changeme( mylist );
print "Valores dentro de la función: ", mylist

El parámetro mylist es local a la función changeme. Cambiar mylist dentro de la función no afecta a mylist. La función no logra nada y finalmente esto produciría el siguiente resultado:

Valores dentro de la función: [1, 2, 3, 4]
Valores fuera de la función: [10, 20, 30]
Argumentos de la función
Puede llamar a una función utilizando los siguientes tipos de argumentos formales:

  • Argumentos requeridos
  • Argumentos de palabras
  • Argumentos predeterminados
  • Argumentos de longitud variable
  • Argumentos requeridos

Los argumentos requeridos son los argumentos pasados ​​a una función en el orden posicional correcto. Aquí, el número de argumentos en la llamada a la función deben coincidir exactamente con la definición de la función.

Para llamar a la función printme (), definitivamente necesitamos pasar un argumento, de lo contrario, da un error de sintaxis de la siguiente manera:

#!/usr/bin/python

# Definición de la función
def printme( str ):
   "Esto imprime un mensaje en la función"
   print str
   return;

# Ahora puedes llama a la función changeme
printme()

# Debería devolver esto 

Traceback (most recent call last):
   File "test.py", line 11, in 
      printme();
TypeError: printme() takes exactly 1 argument (0 given)

Argumentos de palabras

Los argumentos de palabras están relacionados con las llamadas de función. Cuando utiliza argumentos de palabras en una llamada de función, la persona que llama identifica los argumentos por el nombre del parámetro.

Esto le permite omitir argumentos o ponerlos fuera de orden porque el intérprete de Python puede usar las palabras clave proporcionadas para hacer coincidir los valores con los parámetros. También puede realizar llamadas de palabras clave a la función printme () de las siguientes maneras:

#!/usr/bin/python

# Definición de la función
def printme( str ):
   "Esto imprime un mensaje en la función"
   print str
   return;

# Ahora puedes llamar a la función printme
printme( str = "My string")

Debería devolver esto −

My string

Este ejemplo también lo demuestra

#!/usr/bin/python

# Definición de la función
def printinfo( name, age ):
   "This prints a passed info into this function"
   print "Name: ", name
   print "Age ", age
   return;

# Ahora puedes llamar a la función printinfo
printinfo( age=50, name="miki" )

Debería devolver esto:

Name: miki
Age 50

Argumentos predeterminados

Un argumento predeterminado es un argumento que asume un valor predeterminado si no se proporciona un valor en la llamada a la función para ese argumento. El siguiente ejemplo da una idea sobre los argumentos predeterminados, imprime la edad predeterminada si no se pasa:

#!/usr/bin/python

def printinfo( name, age = 35 ):
   print "Name: ", name
   print "Age ", age
   return;

printinfo( age=50, name="miki" )
printinfo( name="miki" )

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Name: miki
Age 50
Name: miki
Age 35

Argumentos de longitud variable

Es posible que deba procesar una función para más argumentos de los que especificó al definir la función. Estos argumentos se denominan argumentos de longitud variable y no se nombran en la definición de la función, a diferencia de los argumentos requeridos y predeterminados.

La sintaxis de una función con argumentos variables que no son palabras clave es la siguiente:

def functionname([formal_args,] *var_args_tuple ):
   "function_docstring"
   function_suite
   return [expression]

Se coloca un asterisco (*) antes del nombre de la variable que contiene los valores de todos los argumentos variables que no son palabras clave. Esta tupla permanece vacía si no se especifican argumentos adicionales durante la llamada a la función. El siguiente es un ejemplo simple:

#!/usr/bin/python

def printinfo( arg1, *vartuple ):
   "This prints a variable passed arguments"
   print "Output is: "
   print arg1
   for var in vartuple:
      print var
   return;


printinfo( 10 )
printinfo( 70, 60, 50 )

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Output is:
10
Output is:
70
60
50

La declaración de retorno

La declaración return [expresión] sale de una función, opcionalmente devolviendo una expresión a la persona que llama. Una declaración de retorno sin argumentos es lo mismo que devolver Ninguno.

Todos los ejemplos anteriores no están devolviendo ningún valor. Puede devolver un valor de una función de la siguiente manera:

 
#! / usr / bin / python
# La definición de la función está aquí
def suma (arg1, arg2):
   # Agrega ambos parámetros y devuélvelos ".
   total = arg1 + arg2
   print "Dentro de la función:", total
   return total

# Ahora puedes llamar a la función de suma
total = suma (10, 20);
print "Fuera de la función:", total

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Dentro de la función: 30
Fuera de la función: 30

Alcance de las variables

Es posible que no se pueda acceder a todas las variables de un programa en todas las ubicaciones de ese programa. Esto depende de donde haya declarado una variable.

El alcance de una variable determina la parte del programa donde puede acceder a un identificador particular. Hay dos ámbitos básicos de variables en Python:

  1. Variables globales
  2. Variables locales

Variables globales vs. locales

Las variables que están definidas dentro de un cuerpo de función tienen un alcance local, y las definidas afuera tienen un alcance global.

Esto significa que solo se puede acceder a las variables locales dentro de la función en la que están declaradas, mientras que todas las funciones pueden acceder a las variables globales a través del cuerpo del programa. Cuando llama a una función, las variables declaradas dentro de ella se ponen en alcance. El siguiente es un ejemplo simple:

#! / usr / bin / python
total = 0; # Esta es una variable global.
# La definición de la función está aquí
def suma (arg1, arg2):
   # Agrega ambos parámetros y devuélvelos ".
   total = arg1 + arg2; # Aquí el total es variable local.
   print "Dentro de la función total local:", total
   return total

# Ahora puedes llamar a la función de suma
suma (10, 20);
print "Fuera de la función total global:", total

Cuando se ejecuta el código anterior, produce el siguiente resultado:

Dentro de la función total local: 30
Fuera de la función total global: 0


Written by Tutor