Funciones de Python

Una función es un bloque de código organizado y reutilizable que se utiliza para implementar una única función o funciones relacionadas.

Las funciones mejoran la modularidad de la aplicación y la reutilización del código. Ya sabes que Python proporciona muchas funciones integradas, como print(). Pero también puedes crear tus propias funciones, lo que se denomina funciones definidas por el usuario.


Definir una función

Puedes definir una función con la funcionalidad que desees. Estas son las reglas simples:

  • El bloque de código de la función comienza condefla palabra clave, seguida del nombre del identificador de la función y paréntesis.()。
  • Cualquier parámetro de entrada o argumento debe colocarse entre paréntesis. Los paréntesis también se pueden usar para definir parámetros.
  • La primera declaración de la función puede usar opcionalmente una cadena de documentación (docstring) para almacenar la descripción de la función.
  • El contenido de la función comienza con dos puntos y está indentado.
  • return [expresión]Finaliza la función y opcionalmente devuelve un valor al llamador. Un return sin expresión equivale a devolver None.

Sintaxis

def functionname( parameters ): "Función_docstring" function_suite return [expression]

De forma predeterminada, los valores de los parámetros y los nombres de los parámetros se emparejan en el orden definido en la declaración de la función.

Ejemplo

A continuación se muestra un ejemplo simple de una función de Python que toma una cadena como parámetro de entrada y la imprime en el dispositivo de visualización estándar.

Ejemplo (Python 2.0+)

def printme( str ): "Imprime la cadena pasada en el dispositivo de visualización estándar." print str return

Llamada a una función

Definir una función solo le da un nombre a la función, especifica los parámetros que contiene y la estructura del bloque de código.

Una vez completada la estructura básica de la función, puedes llamarla desde otra función o ejecutarla directamente desde el intérprete de Python.

El siguiente ejemplo llama a la función printme():

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Definir la función def printme( str ): "Imprime cualquier cadena pasada." print str return # Llamar a la función printme("¡Voy a llamar a la función definida por el usuario!") printme("Llamar a la misma función de nuevo")

El resultado del ejemplo anterior es:

¡Quiero llamar a una función definida por el usuario!

Paso de parámetros

En Python, el tipo pertenece al objeto, las variables no tienen tipo:

a=[1,2,3] a="Ejemplo"

En el código anterior,[1,2,3]es de tipo List,"Ejemplo"es de tipo String, mientras que la variable a no tiene tipo; es solo una referencia (puntero) a un objeto, puede ser un objeto de tipo List o apuntar a un objeto de tipo String.

Objetos mutables e inmutables

En Python, las cadenas, las tuplas y los números son objetos inmutables, mientras que listas, diccionarios, etc., son objetos mutables.

  • Tipo inmutable:Asignación de variablea=5luego reasignara=10, aquí en realidad se genera un nuevo objeto int con valor 10, y a pasa a apuntar a él, mientras que 5 se descarta; no es cambiar el valor de a, equivale a crear una nueva a.

  • Tipo mutable:Asignación de variablela=[1,2,3,4]luego reasignarla[2]=5eso significa que se cambia el valor del tercer elemento de la lista la; la en sí no se modifica, solo se modifica una parte interna de su valor.

Paso de parámetros en funciones de Python:

  • Tipo inmutable:Similar al paso por valor en C++, como enteros, cadenas, tuplas. Por ejemplo, fun(a) solo pasa el valor de a, sin afectar al objeto a en sí. Por ejemplo, si se modifica el valor de a dentro de fun(a), solo se modifica otro objeto copiado, no afecta a a en sí.

  • Tipo mutable:Similar al paso por referencia en C++, como listas, diccionarios. Por ejemplo, fun(la) pasa realmente la, y después de la modificación, la fuera de fun también se verá afectada.

En Python, todo es un objeto. En sentido estricto, no podemos decir paso por valor o paso por referencia; deberíamos decir pasar objetos inmutables y pasar objetos mutables.

Ejemplo de paso de objetos inmutables en Python

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- def ChangeInt( a ): a = 10 b = 2 ChangeInt(b) print b # El resultado es 2

En el ejemplo hay un objeto int 2, la variable que lo apunta es b. Al pasarlo a la función ChangeInt, la variable b se copia por valor; a y b apuntan al mismo objeto Int. Cuando a=10, se genera un nuevo objeto int con valor 10 y a pasa a apuntar a él.

Ejemplo de paso de objetos mutables

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def changeme( mylist ): "Modificar la lista pasada" mylist.append([1,2,3,4]) print "Valor dentro de la función:", mylist return # Llamar a la función changeme mylist = [10,20,30] changeme( mylist ) print "Valor fuera de la función:", mylist

En el ejemplo, el objeto pasado a la función y el que se usa para agregar contenido al final son la misma referencia, por lo que el resultado es el siguiente:

函数内取值:  [10, 20, 30, [1, 2, 3, 4]]
函数外取值:  [10, 20, 30, [1, 2, 3, 4]]

Parámetros

A continuación se muestran los tipos de parámetros formales que se pueden usar al llamar a una función:

  • Parámetros obligatorios
  • Parámetros de palabra clave
  • Parámetros por defecto
  • Parámetros de longitud variable

Parámetros obligatorios

Los parámetros obligatorios deben pasarse a la función en el orden correcto. La cantidad al llamar debe ser la misma que en la declaración.

Para llamar a la función printme(), debes pasar un parámetro; de lo contrario, se producirá un error de sintaxis:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def printme( str ): "Imprimir cualquier cadena pasada." print str return # Llamar a la función printme printme()

El resultado del ejemplo anterior es:

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

Parámetros de palabra clave

Los parámetros de palabra clave están estrechamente relacionados con la llamada a la función. La llamada a la función utiliza parámetros de palabra clave para determinar los valores de los parámetros pasados.

El uso de parámetros de palabra clave permite que el orden de los parámetros en la llamada a la función no coincida con el de la declaración, porque el intérprete de Python puede hacer coincidir los valores de los parámetros con los nombres de los parámetros.

El siguiente ejemplo usa nombres de parámetros al llamar a la función printme():

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def printme( str ): "Imprimir cualquier cadena pasada." print str return # Llamar a la función printme printme( str = "My string")

El resultado del ejemplo anterior es:

My string

El siguiente ejemplo muestra más claramente que el orden de los parámetros de palabra clave no es importante:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def printinfo( name, age ): "Imprimir cualquier cadena pasada." print "Name: ", name print "Age ", age return # Llamar a la función printinfo printinfo( age=50, name="miki" )

El resultado del ejemplo anterior es:

Name:  miki
Age  50

Parámetros por defecto

Al llamar a la función, si no se pasa el valor de un parámetro por defecto, se considera el valor predeterminado. El siguiente ejemplo imprime la edad predeterminada si no se pasa age:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def printinfo( name, age = 35 ): "Imprimir cualquier cadena pasada." print "Name: ", name print "Age ", age return # Llamar a la función printinfo printinfo( age=50, name="miki" ) printinfo( name="miki" )

El resultado del ejemplo anterior es:

Name:  miki
Age  50
Name:  miki
Age  35

Parámetros de longitud variable

Puede que necesites una función que pueda manejar más parámetros de los que se declararon inicialmente. Estos parámetros se denominan parámetros de longitud variable y, a diferencia de los dos tipos de parámetros anteriores, no se nombran en la declaración. La sintaxis básica es la siguiente:

def functionname([formal_args,] *var_args_tuple ): "Función_docstring" function_suite return [expression]

El nombre de variable con asterisco (*) almacenará todos los parámetros variables sin nombre. Un ejemplo de parámetros de longitud variable es el siguiente:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Descripción de la función def printinfo( arg1, *vartuple ): "Imprimir cualquier parámetro pasado" print "Salida:" print arg1 for var in vartuple: print var return # Llamar a la función printinfo printinfo( 10 ) printinfo( 70, 60, 50 )

El resultado del ejemplo anterior es:

输出:
10
输出:
70
60
50

Funciones anónimas

Python usa lambda para crear funciones anónimas.

  • lambda es solo una expresión, su cuerpo es mucho más simple que el de def.
  • El cuerpo de lambda es una expresión, no un bloque de código. Solo se puede encapsular lógica limitada en una expresión lambda.
  • La función lambda tiene su propio espacio de nombres y no puede acceder a parámetros fuera de su propia lista de parámetros ni a parámetros del espacio de nombres global.
  • Aunque la función lambda parece escribirse en una sola línea, no es equivalente a las funciones inline de C o C++, cuyo propósito es no ocupar memoria de pila al llamar a funciones pequeñas y así aumentar la eficiencia de ejecución.

Sintaxis

La sintaxis de la función lambda contiene solo una declaración, como sigue:

lambda [arg1 [,arg2,.....argn]]:expression

Ejemplo:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Documentación de la función sum = lambda arg1, arg2: arg1 + arg2 # Llamar a la función sum print "El valor después de la suma es:", sum( 10, 20 ) print "El valor después de la suma es:", sum( 20, 20 )

El resultado del ejemplo anterior es:

相加后的值为 :  30
相加后的值为 :  40

Declaración return

La declaración return [expresión] sale de la función y devuelve opcionalmente una expresión al llamador. La declaración return sin valor de parámetro devuelve None. Los ejemplos anteriores no demostraron cómo devolver valores numéricos; el siguiente ejemplo te muestra cómo hacerlo:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- # Documentación de la función def sum( arg1, arg2 ): # Devuelve la suma de 2 parámetros. total = arg1 + arg2 print "Dentro de la función:", total return total # Llamar a la función sum total = sum( 10, 20 )

El resultado del ejemplo anterior es:

函数内 :  30

Ámbito de las variables

No todas las variables de un programa son accesibles desde cualquier lugar. El permiso de acceso depende de dónde se asigna la variable.

El ámbito de una variable determina en qué parte del programa puedes acceder a un nombre de variable específico. Los dos tipos de ámbito de variables más básicos son los siguientes:
  • Variables globales
  • Variables locales

Variables globales y locales

Las variables definidas dentro de una función tienen un ámbito local, y las definidas fuera de la función tienen un ámbito global.

Las variables locales solo se pueden acceder dentro de la función en la que se declaran, mientras que las variables globales se pueden acceder en todo el programa. Al llamar a una función, todos los nombres de variables declarados dentro de la función se agregan al ámbito. Como en el siguiente ejemplo:

Ejemplo (Python 2.0+)

#!/usr/bin/python # -*- coding: UTF-8 -*- total = 0 # Esta es una variable global # Documentación de la función def sum( arg1, arg2 ): # Devuelve la suma de 2 parámetros. total = arg1 + arg2 # total aquí es una variable local. print "Dentro de la función es una variable local:", total return total # Llamar a la función sum sum( 10, 20 ) print "Fuera de la función es una variable global:", total

El resultado del ejemplo anterior es:

函数内是局部变量 :  30
函数外是全局变量 :  0
Otras extensiones