Funciones en Python (Parte 2)

Publicado por Gio M en 21:44
Las funciones son fragmentos de código a los que les damos nombre. Estas devuelven un resultado, de acuerdo a un conjunto de instrucciones conocidas como Algoritmo. Para saber más sobre el concepto de algoritmo visiten
http://es.wikipedia.org/wiki/Algoritmo

En Python las funciones son precisamente esto. Para quienes hayamos programado en scheme una función se veía de la siguiente forma

; Función para sacar construir una lista con los números pares de otra lista
(define (sacar-pares lista)
(cond ((null? lista) lista) ((even? (car lista)) (cons (car lista) (sacar-pares (cdr lista))))
(else (sacar-pares (cdr lista)))))


; Llamada a la función
(sacar-pares '(1 2 3 4 5 6 7 8))

Esta función nos devolvía la siguiente lista: (2 4 6 8).

Se debían usar bastantes paréntesis para definir nuestras funciones. Sin embargo ahora en Python tenemos que crear las funciones de forma diferente. De hecho conforme varían los lenguajes de programación así varía su código. Por lo que, si queremos crear un mismo algoritmo en diferentes lenguajes de programación, las funciones serán diferentes.

Por ejemplo tenemos una lista de palabras, y queremos que Python nos saque todas las palabras que comiencen con una determinada letra, eso se haría de la siguiente forma:

# Función
def imprimir(*frase):
    for palabras in frase:
        if palabras[0] == "h": print palabras


# Llamada a la función
imprimir("hola", "hacha", "ola", "acha", "heraldo")

Esto nos devolvería las palabras "hola", "hacha", y "heraldo". Las funciones por sí solas no funcionan debemos llamarlas para que nos devuelvan un resultado. Como pudieron ver arriba en la parte donde dice llamada a la función, eso quiere decir que en ese momento estamos llamando a la función.

Una función tiene un nombre con el que la llamamos, pero además contiene argumentos. Sin duda eso debe ser lo primero que debemos profundizar.

1- ARGUMENTOS BÁSICOS EN UNA FUNCIÓN


Los argumentos son recibidos por una función para que dichas funciones ejecuten procedimientos de forma dinámica. Por ejemplo si queremos hacer que una función sume dos números, pero que esta función sirva con cualquier par de números, en Python lo hacemos así:

def sumar(x, y):
    print x + y

   
El def expresa define, que significa definir. Cuando creamos una función la estamos definiendo. El nombre de esta función es sumar, su primer argumento es x, y su segundo argumento es y. Luego abajo aparece la suma de x + y y la impresión de dicha suma.

Aparece un espacio antes de la segunda línea de la función. Esto es porque cuando definimos una función debemos presionar la tecla tab (la que tiene dos flechas señalando de forma inversa en relación una a la otra).

Pero esa función no hace nada por sí sola, sino que tenemos que llamarla. La llamaríamos de la siguiente forma:

sumar(1, 1)

Eso nos devolvería 2, ya que tanto x como y valen 1. Los argumentos van separados por comas. Si quisiéramos sumar los números 6 y 12, sería de la siguiente forma:

sumar(6, 12)

Y esto nos devolvería como resultado la impresión de 18. De esta forma es como funcionan los argumentos dentro de una función

2- FUNCIÓN PARA FORMAR UNA FRASE, ERROR

Aquí tenemos una función que arma una frase con los argumentos que recibe

def frase(palabra1,palabra2,palabra3):
    print palabra1 + " " + palabra2 + " " + palabra3


Al llamarla:

frase("hola","cómo","estás")

nos devuelve la frase en forma de string "hola cómo estás". Qué pasaría si le diésemos más argumentos de los que puede recibir la función. por ejemplo si la llamamos de la siguiente forma

frase("hola","cómo","estás","amigo")


Simplemente nos devuelve un error. Por ejemplo:

Traceback (most recent call last):
  File "D:\[BODEGA]\Proyectos Python\mmm\src\Pythoneando2.py", line 6, in
    frase("hola","cómo","estás","amigo")
TypeError: frase() takes exactly 3 arguments (4 given)

Como pueden ver abajo dice takes exactly 3 arguments (4 given) quiere decir que solo recibía 3 argumentos y le dimos 4. Por eso debemos definir la función de acuerdo a cuántos argumentos deseamos que reciba la función.

Pero, ¿Y si queremos que la función pueda recibir infinito número de argumentos?

3- ARGUMENTOS INFINITOS

Para crear una función similar pero con argumentos infinitos debemos hacer lo siguiente:

def frase(*lafrase):
    for palabra in lafrase:
        print palabra
   
frase("hola"
, "cómo", "estás")

Esto nos devuelve las palabras "hola" "cómo" "estás" aunque no unidas como una frase. Si desean proponer una función para realizarlo pueden hacerlo. Fíjense en la parte de los argumentos, aparece un solo argumento con un asterisco. Esto quiere decir que la función recibe varios argumentos y los toma como si estuviesen dentro de una lista, y le aplica la función a todos los argumentos.

Sin embargo, podemos separar los tipos de argumentos. Supongamos que necesitamos una función que reciba 2 argumentos que sean dos strings, y luego que reciba infinitos argumentos que sean números enteros. Podemos hacer lo siguiente

def mifuncion(argumento1,argumento2,*demasargumentos):
   print argumento1 + " " + argumento2
   print demasargumentos


Y para llamar esta función podría ser algo como esto:

mifuncion("hola","amigo",1, 2, 3, 4, 5, 6)


Lo cual nos devolvería lo siguiente:

hola amigo
(1, 2, 3, 4, 5, 6)


Nos unió los dos primeros argumentos que eran strings, y además nos devolvió una Tupla. Ojo, que nos devolvió una Tupla y no una lista. La diferencia entre Tupla y lista la iremos explicando conforme vayamos avanzando, aunque ya se explicó un poco de ello en
LISTAS EN PYTHON

Por lo tanto podemos crear funciones con argumentos dinámicos, por decir algo. Y ya que hablamos de listas y tuplas, si leíste el enlace anterior, podríamos también hablar de diccionarios más adelante. Los tres tipos de colecciones serían listas, tuplas y diccionarios. Esto lo trataremos a fondo más adelante. Por ahora no es necesario, ya que aún no estamos creando funciones tan complejas.

4- VALORES POR DEFECTO

Podemos utilizar los valores por defecto si necesitamos un argumento opcional. O sea, que si deseamos colocarlo, entonces podamos modificar su valor, pero si no deseamos colocarlo, entonces que tenga un valor por defecto. Supongamos que queremos una función que imprima un número de veces una cadena de texto cualquiera.

def textoveces(texto,veces = 1):
    print veces * texto


Hay dos formas de llamar esta función. El argumento veces vale por defecto 1, por lo tanto si deseamos no lo colocamos

textoveces("hola cómo estás")

esto nos devolvería "hola cómo estás"

Sin embargo, en la función se especifica que multiplique la cadena de texto por el argumento veces. En Python si multiplicamos un string por un número entonces se repite dicho string, ese número de veces. Por lo tanto si llamamos a la función cambiando el argumento veces, sería

(textoveces ("hola cómo estás",3)

Esto nos devolvería "hola cómo estáshola cómo estáshola cómo estás"

En otras palabras en este tipo de funciones podemos colocar u omitir un argumento, ya que tendrá un valor por defecto. Cómo nos hubiese servido algo como eso en Scheme sin duda ¿No?

5- LOS MÉTODOS


Los métodos son funciones que ya trae un lenguaje de programación y están ligados a un tipo de información en específico. Los métodos en Python se expresan con un punto después de un tipo.

Por ejemplo las listas tienen un método llamado append. Las listas serían el tipo y append sería el método.

Suponiendo que tuviesemos una lista llamada listagreen

listagreen = [ ]


y con el método append podemos introducirle un nuevo elemento

listagreen.append(1)


print listagreen

Esto nos devolvería [1], que sería listagreen con el nuevo elemento dentro de ella. Así es como trabajan los métodos.

Los diccionarios tienen también un método llamado item. En realidad los tipos vienen acompañados de métodos.


6- ALGUNOS MÉTODOS DE STRINGS

variable = "HOLA todo BIEN?"

print variable.lower() # nos devuelve todas las letras en minúsculas, "hola todo bien?"

print variable.upper() # nos devuelve todas las letras en mayúsculas, "HOLA TODO BIEN?"

print variable.swapcase() # cambia las minúsculas por mayúsculas y viceversa, "hola TODO bien?"

print variable.replace("o", "s") # Reeplaza texto, "HOLA tsds BIEN?"

print variable.replace("BIEN", "MAL") # Mismo ejemplo de arriba pero con una palabra, "HOLA todo MAL?"

print variable.__class__ # Devuelve el tipo, en este caso sería str (de string)

print variable.__add__("..ME ALEGRO") # Agrega un trozo al string, "HOLA todo BIEN?..ME ALEGRO"

print variable.__contains__("B") # Devuelve verdadero si existe dentro del string. En este caso devuelve True ya que B existe en la palabra BIEN.

print variable.__contains__("BIEN") # Mismo ejemplo de arriba pero con una palabra. Devuelve True.

print variable.__eq__("HOLA todo BIEN?") # Devuelve True si es igual el string al valor de la variable

print variable.__getnewargs__() # Convierte la variable string en una tupla con el string adentro

print variable.__len__() # Devuelve la cantidad de carácteres, en este caso 15 (Ya que cuenta los espacios también)

print variable.__sizeof__() # Devuelve el tamaño en bits de la cadena de carácteres

print variable.isupper() # Devuelve verdadero si todo el texto está en mayúsculas

print variable.islower() # Devuelve verdadero si todo el texto está en minúsculas

print variable.isspace() # Devuelve verdadero si el texto es uno o varios espacios en blanco

print variable.istitle() # Devuelve verdadero si la primera letra es mayúscula

print variable.isalpha()
# Devuelve verdadero si el texto está conformado solamente por letras del alfabeto

7- ALGUNOS MÉTODOS DE NÚMEROS

variable = 27

print variable.numerator  # Devuelve el numerador de un número

print variable.denominator # Devuelve el denominador de un número

print variable.__oct__() # Devuelve el número en octal


8- ALGUNOS MÉTODOS DE LISTAS

variable = [1, 2, 3, 4, 5, 6]

print variable.pop(2) # Devuelve el elemento en la posición dos, en este caso sería el 3.

variable.insert(0, 100) # Inserta un 100 en la posición 0 de la lista, y luego devuelve la lista con el 100 en dicha posición.
print variable # Devuelve [100, 1, 2, 3, 4, 5, 6]

variable.reverse()
# Invierte una lista, devuelve [6, 5, 4, 3, 2, 1]
print variable

variable.remove(1) # Elimina un elemento de la lista según su posición, devuelve [2, 3, 4, 5, 6]
print variable

variable.__delitem__(1) # También elimina un elemento según su posición, pero devuelve [1, 3, 4, 5, 6]
print variable

print variable.__str__() # convierte la variable en un string, devuelve "[1, 2, 3, 4, 5, 6]"

variable.__setitem__(2, 999) # Modifica un elemento según su posición. Devuelve [1, 2, 999, 4, 5, 6]
print variable

De esta forma se puede acceder a información de algún tipo a través de los métodos propios del lenguaje de programación, en este caso Python.


En la siguiente parte comenzaremos a crear funciones usando así mismo métodos y descubriendo todo lo que falta sobre el asunto.

0 Respuestas a 'Funciones en Python (Parte 2)'

Publicar un comentario en la entrada