Creación y uso de funciones en Python 3

Introducción:

A medida que empezamos a programar nuestro propios programas nos damos cuenta, que a veces hay una pequeña parte de código que tiende siempre a repetirse. Es aquí cuando surge la idea de agrupar dicho código en una función.

1. ¿Que es una función?

Es un fragmento de código que podemos ejecutar múltiples veces gracias a un nombre único que la identifica. Para comunicarse con el proceso principal las funciones pueden recibir y devolver datos manipulados.

Sintaxis básica:

def hello():

print(“Hello World”)

# Para llamar a la función simplemente ejecutar el nombre de la función

hello()

Hello World

Otro ejemplo:

def dibujar_tabla_del_5():

for i in range(10):

print(“5 *”,i,“=”,i*5)

Nota: si en la función queremos hacer un print de una variable, y esta no se ha definido dentro de dicha función pero si se ha definido fuera de ella y antes de ejecutar la función, se mostrará:

m = 10

def test():

print(m)

test()

10

Consejo: evitar nombrar a las variables externas e internas con el mismo nombre.

2. Retorno de valores

def test():

return “Una cadena retornada”

test()

‘Una cadena retornada’

#Al utilizar return la función devuelve el valor y finaliza

Incluso podemos hacer slicing con el valor retornado:

def test():

return [1,2,3,4,5]

print(test()[1:4])

[2, 3, 4]

# Aunque así estaríamos ejecutando la función cada vez que consultamos, una manera más optima sería almacenarlo en una variable

l = test()

l[-1]

5

También pueden devolver múltiples valores separados por comas:

def test():

return “Una cadena”,20,[1,2,3]

test()

(‘Una cadena’, 20, [1, 2, 3]) # Esto es una tupla

c,n,l = test()

c

‘Una cadena’

n

20

l

[1, 2, 3]

3. Enviando valores

# Definición – Parámetros

def suma(a,b):

return a+b

# Llamada – Argumentos

r = suma(2,5)

r

7

4. Argumentos y parámetros

# Pasar los argumentos por posición

def resta(a,b):

return a-b

resta(1,2)

-1

# Pasar los argumentos por nombre, cambiando así el orden

resta(b=2,a=1)

-1

# Definir unos argumentos por defecto

def resta(a=None,b=None):

if a == None or b == None:

print(“Error, debes enviar dos números a la función”)

return

else:

return a-b

resta(1,5)

-4

5. Argumentos por valor y referencia

Las listas, conjuntos y diccionarios se envían por referencia a la función, quiere decir que no se almacena una copia de ello dentro de la función, si no que se maneja al dato original y si se modifica se verá reflejado en el exterior.

Por valor:

def doblar_valor(numero):

numero*= 2

n = 10

doblar_valor(n)

n

10

Por referencia:

# La n sigue valiendo 10 debido a que el calculo se ha hecho internamente en la función

def doblar_valores(numeros):

for i,n in enumerate(numeros):

numeros[i] *= 2

ns = [10, 50, 100]

doblar_valores(ns)

ns

[20, 100, 200]

6. Argumentos indeterminados

def indeterminados(*args):

for arg in args:

print(arg)

indeterminados(5,”Hola”,[1,2,3,4,5]) # Tupla

5

Hola

[1,2,3,4,5]

Por nombre: ( Clave y valor )

def indeterminados_nombre(**kwargs):

print(kwargs)

indeterminados_nombre(n=5,c=”Hola”,l=[1,2,3,4,5])

{‘n’: 5, ‘c’: ‘Hola’, ‘l’ : [1, 2, 3, 4,5]} # Diccionario

Si quisiéramos recorrerlo:

def indeterminados_nombre(**kwargs):

for kwarg in kwargs:

print(kwargs,” “, kwargs[kwarg])

indeterminados_nombre(n=5,c=”Hola”,l=[1,2,3,4,5])

n     5

c     Hola

l     [1, 2, 3, 4, 5]

O incluso mezclarlos:

def funcion(*args,**kwargs):

t = 0

for arg in args:

t += arg

print(“La suma indeterminada es”, t)

for kwarg in kwargs:

print(kwarg,” “, kwargs[kwarg])

funcion(10,50,-1,1.56,10,20,300,nombre=”Charlie”,edad=24)

La suma indeterminada es 390.56

nombre     Charlie

edad     24

7. Funciones recursivas

Es cuando una función se llama así misma

Sin retorno:

def cuenta_atras(num):

num -= 1

if num > 0:

print(num)

cuenta_atras(num)

else:

print(“Buum!”)

cuenta_atras(5)

4

3

2

1

Buum!

Con retorno:

def factorial(num):

if num > 1:

num = num * factorial(num -1)

return num

factorial(5)

120

8. Funciones integradas

Para crear conversiones entre tipos de datos o manipular información.

Función str : para concatenar una cadena con un número

c = “Un texto y un número “ + str(10) + ” ” + str(3.14)

c

‘Un texto y un número 10 3.14

Función bin: transformar un número entero a binario

bin(10)

‘0b1010’

Función hex: transformar un número entero a hexadecimal

hex(10)

‘0xa’

Devolver el binario y hexadecimal a su número entero:

int(‘0b1010’,2)

10

int(‘0xa’,16)

10

Función abs: devolver el valor absoluto de un número

abs(-10)

10

Función round: redondear un número

round(5.5)

6

Función eval: evaluar una expresion en una cadena e incluso variables definidas anteriormente

eval(‘2+5’)

7

n = 10

eval(‘n*10 -5’)

95

Función help : para tener la ayuda de python

help()

topics

Nota: la palabra global , indica que una variable de una función hace referencia a una variable externa, así se evita volver a declararla.

Ejemplo:

def doblar():

global num

num *= 2

num = 5

doblar()

print(num)

Ejercicios resueltos

1) Realiza una función llamada area_rectangulo() que devuelve el área del rectángulo a partir de una base y una altura. Calcula el área de un rectángulo de 15 de base y 10 de altura.

def area_rectangulo(base, altura):

return base*altura

print( area_rectangulo(15, 10))

150

2) Realiza una función llamada area_circulo() que devuelva el área de un círculo a partir de un radio. Calcula el área de un circulo de 5 de radio:

import math

def area_circulo(radio):

return (radio**2) * math.pi

print( area_circulo[5] )

78.53981633974483

3) Realiza una función llamada relacion() que a partir de dos número cumpla lo siguiente:

  • Si el primer número es mayor que el segundo, debe devolver 1.
  • Si el primer número es menor que el segundo, debe devolver -1.
  • Si ambos número son iguales, debe devolver un 0.

def relacion(a,b):

if a > b:

return 1

elif a < b:

return -1

else:

return 0

 

4) Realiza una función llamada intermedio() que a partir de dos números, devuelva su punto intermedio:

Nota: el número intermedio de dos número corresponde a la suma de los dos número dividida entre 2

def intermedio(a,b):

return (a+b) / 2

intermedio(-12,24)

6.0

5) Realiza una función llamada recortar() que reciba tres parámetros. El primero es el número a recortar, el segundo es el límite inferior y el tercero el límite superior. La función tendrá que cumplir lo siguiente:

  • Devolver el limite inferior si el número es menor que éste
  • Devolver el limite superior si el número es mayor que éste
  • Devolver el número sin cambios si no se supera ningún límite

def recortar(numero, minimo, maximo)

if numero < minimo:

return minimo

elif numero > maximo:

return maximo

return numero

print( recortar(15, 0, 10) )

10

6) Realiza una función separar() que tome una lista de número enteros y devuelva dos listas ordenadas. La primera con los número pares, y la segunda con los número impares:

numeros = [-12, 84, 13, 20, -33, 101, 9]

def separar(lista):

lista.sort()

pares = []

impares = []

for n in lista:

if n%2 == 0:

pares.append(n)

else:

impares.append(n)

return pares, impares

pares, impares = separar(numeros)

print(pares)

print(impares)

[-12, 20, 84]

[-33, 9, 13, 101]

Autor entrada: CharlieJ

1 thought on “Creación y uso de funciones en Python 3

    Palote

    (4 septiembre, 2017 - 10:40 pm)

    Puto amo, que crack!!
    Sigue así nabuo.

Deja un comentario

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