Una función es un bloque de código con un nombre asociado, que recibe 0 o más argumentos como entrada, sigue una serie de instrucciones, y devuelve un valor y/o realiza una tarea.
El uso de funciones es un componente muy importante de la programación estructurada, y tiene varias ventajas:
Python dispone de una serie de funciones integradas al lenguaje (built-in), y también permite crear funciones definidas por el usuario.
Veamos primero algunas de las funciones integradas de Python más usadas.
print()
¶La función print() recibe uno o más argumentos, que por defecto se imprimen en la salida estándar.
Si hay más de un argumento, deben ir separados por comas. Por defecto, se imprimen separados por espacios.
print(1, 12, 123, "hola")
La función print() puede recibir también algunos argumentos opcionales, que deberán necesariamente pasarse con su nombre.
print(1, 12, 123, "hola", sep=' ; ')
También puede ser un carácter extendido, como tabulador (\\t) o salto de línea (\\n).
print(1, 12, 123, "hola", sep='\t')
print(1, 12, 123, "hola", sep='\n')
print(1, 12, 123, "hola", end=' - ')
print("otra llamada a la función, en la misma línea")
Hay otros parámetros opcionales para la función print():
En los argumentos que se pasan a la función print() se pueden alternar cadenas de caracteres y variables:
operacion = "raíz cuadrada de dos"
valor = 2**0.5
print("el resultado de", operacion, "es:", valor)
Una forma más clara y elegante es referenciar objetos dentro de la misma cadena, y usar el método .format() para sustituirlos con los objetos que se le pasan como argumentos.
Los objetos se referencian con números entre llaves ({ }) dentro de la cadena (llamados campos de formato), y son sustituidos en el orden con que aparecen como argumentos de .format(), contando a partir de cero (argumentos posicionales).
operacion = "raíz cuadrada de dos"
valor = 2**0.5
print("el resultado de {0} es {1}".format(operacion, valor))
Los objetos también pueden ser referenciados por nombre (argumentos por clave).
operacion = "raíz cuadrada de dos"
print("el resultado de {nombre} es {resultado}".format(nombre=operacion, resultado=2**0.5))
En una misma llamada a la función print() pueden combinarse argumentos posicionales con argumentos por clave.
Opcionalmente se puede poner el signo de dos puntos después del número o nombre, y explicitar el tipo del objeto:
Esto permite controlar el formato de impresión del objeto. Por ejemplo, podemos utilizar la expresión .4f para determinar que un número de coma flotante (f) se imprima con cuatro dígitos después de la coma (.4).
operacion = "raíz cuadrada de dos"
valor = 2**0.5
print("el resultado de {0} es {resultado:.4f}".format(operacion, resultado=valor))
También puede aplicarse el operador % para dar formato a las cadenas.
La sintaxis es la siguiente:
operacion = "raíz cuadrada de dos"
valor = 2**0.5
print("el resultado de %s es %f" % (operacion, valor))
Con esta sintaxis hay que determinar el tipo del objeto:
También aquí se puede controlar el formato de salida. Por ejemplo, para obtener el valor con 8 dígitos después de la coma:
operacion = "raíz cuadrada de dos"
valor = 2**0.5
print("el resultado de %s es %.8f" % (operacion, valor))
Una discusión más completa del control de la salida de Python se encuentra en https://docs.python.org/es/3/tutorial/inputoutput.html
input()
¶Como se vio en la clase 1, la función input() puede utilizarse para ingresar datos durante la ejecución del programa.
Opcionalmente, la función puede recibir un argumento, que de estar presente se imprime en la pantalla sin salto de línea final.
La función input() siempre devuelve un objeto de tipo str. Si el valor de entrada va a utilizarse como un número, deberá hacerse la conversión explícitamente.
entrada = int(input("ingrese un número entero: "))
print(entrada**2)
Hay funciones para convertir y procesar tipos numéricos.
int()
¶Devuelve un número entero, que dependerá del tipo de argumento o argumentos que reciba.
Si se ingresa un número de coma flotante (objeto tipo float), devuelve su parte entera.
int(3.6)
También puede devolver el entero correspondiente a una cadena de caracteres (objeto tipo string).
Por defecto, usa la base 10, en cuyo caso la cadena debe estar conformada sólo por números decimales.
int("23")
Pero también puede convertir cadenas en otras bases, si se explicita un segundo argumento. En ese caso, la cadena de caracteres debe ser coherente con una expresión numérica en la base.
int("10110101101", 2)
int("a0fc", 16)
int("3251", 8)
int("1012", 2)
round()
¶Si recibe un argumento numérico, por defecto devuelve el entero más próximo (a diferencia de int(), que trunca a la parte entera).
round(2.3)
round(2.8)
round(-2.8)
round(2.5)
Si se agrega un segundo parámetro opcional (de tipo int), devuelve un número de coma flotante, con una cantidad de cifras después de la coma determinado por el segundo argumento.
a = 2**(0.5)
print(a)
print(round(a))
print(round(a, 2))
print(round(a, 4))
print(round(a, 8))
float()
¶Devuelve un número de coma flotante, y accepta argumentos de tipo numérico (int o float), o de tipo string que sean coherentes con un número entero o de coma flotante (cadenas de caracteres formadas por números y hasta un punto).
float(2)
float(2.5)
float("2")
float("2.5")
abs()
¶Devuelve el valor absoluto de un número (entero o de coma flotante).
abs(3)
abs(-3)
abs(-2.5)
Aparte de los operadores ya vistos, hay funciones que hacen operaciones matemáticas.
divmod()
¶Debe recibir dos argumentos numéricos, y devuelve dos valores: resultado de la división entera, y el resto.
divmod(22, 4)
pow()
¶Si recibe dos argumentos, eleva el primero a la potencia del segundo.
pow(2, 3)
pow(10, 2)
pow(10, -2)
Si recibe un tercer argumento opcional, éste funciona como módulo.
pow(2, 3, 3)
Hay funciones que procesan o dan información de conjuntos de objetos, o de objetos llamados iterables: cadenas de caracteres u otras estructuras de datos que veremos más adelante.
len()
¶Devuelve la longitud (cantidad de elementos) de un objeto. Debe ser un objeto iterable; puede ser una cadena de caracteres, o alguno de los otros tipos de secuencia o colección que veremos más adelante.
len("Hola, Python")
len("0123456789")
max()
¶Si recibe más de un argumento, devuelve el mayor de ellos.
max(23, 12, 145, 88)
max("a", "z")
max("a", "Z")
Si recibe un solo argumento, devuelve el mayor de sus elementos. Debe ser un objeto iterable; puede ser una cadena de caracteres, o alguno de los otros tipos de secuencia o colección que veremos más adelante.
max("Hola, Python")
min()
¶Tiene un comportamiento similar a max(), pero devuelve el mínimo.
min(23, 12, 145, 88)
min("Hola, Python")
sorted()
¶Devuelve ordenados los elementos de un objeto. Debe ser un objeto iterable; puede ser una cadena de caracteres, o alguno de los otros tipos de secuencia o colección que veremos más adelante.
sorted("Hola, Python")
Hay algunas funciones que dan información y ayuda sobre el elemento que reciben como argumento.
type()
¶Devuelve el tipo del objeto que recibe como argumento.
type(2)
type(2.3)
type("hola")
type(int)
help()
¶Invoca el sistema integrado de ayuda, devolviendo información acerca del objeto que recibe como argumento.
help(min)
Hay un par de funciones para convertir entre caracteres y valor de código Unicode.
chr()
¶Recibe como argumento un entero, y devuelve una cadena con el carácter cuyo código Unicode corresponde a ese valor. El rango válido para el argumento es de 0 a 1114111.
chr(97)
chr(934)
chr(1044)
chr(19989)
chr(23057)
ord()
¶Es el inverso de chr(): dada una cadena representando un carácter Unicode, devuelve el entero del código correspondiente.
ord('w')
Como argumento se puede ingresar el carácter literalmente, o su correspondiente código Unicode, antecedido del prefijo '\u'.
ord('丕')
ord("\u4e15")
Hay funciones para convertir números enteros (int) a cadenas de caracteres (string) en distintas bases: decimal, binaria, octal y hexadecimal.
str()
¶Convierte un número entero a una cadena (tipo str) en base decimal.
str(123)
bin()
¶Convierte un número entero a una cadena (tipo str) en base binaria, antecedida del prefijo '0b'.
bin(123)
oct()
¶Convierte un número entero en una cadena (tipo str) en base octal, antecedida del prefijo '0o'.
oct(8)
oct(123)
hex()
¶Convierte un número entero a una cadena (tipo str) en base hexadecimal, antecedida del prefijo '0x'.
hex(16)
hex(127)
Hay varias funciones integradas más en Python; la lista de todas las funciones disponibles en el lenguaje con la descripción correspondiente se puede encontrar en: https://docs.python.org/es/3/library/functions.html