Está en la página 1de 29

Programando con Python

Functions
Functions
 Conceptos
 Una función es un grupo de sentencias, que realizan una tarea
específica.
 Sintáxis:
def function_name(arg1, arg2, arg3 ... argN): Header
<indented statement 1>
<non-indented statement 2>
... Body
<indented statement n>
<return statement>
Functions
 Conceptos
 La primera línea del body puede ser un comentario simple (#) o
un comentario de documentación, docstring (“”” asi “”””)
 Es buena práctica usar los docstring, para documentar el
código
 La última sentencia (return) es opcional y es usada en el caso
que la función retorne algún valor.
 Si la función no tiene una sentencia return entonces la palabra
clave None es retornada automáticamente
 None es un tipo intrínseco de Python que indica la ausencia de
valor o un valor nulo.
Functions
 Conceptos
 Una función por sí sola no hace nada, debe ser llamada para
que realice su cometido.
 Sintaxis de la llamada:
function_name(arg1, arg2, …, argN)
Functions
 Variables locales, Globales y el alcance (scope)
 El alcance (scope) de una variable se refiere a la parte del
programa donde se tiene acceso a la variable.
 La variables creadas dentro de una función se les llama
variables locales. Debido a que sólo se le puede llegar dentro
del body de la función
 Las variables locales están sujetas a la recolección de basura
(garbage collector) del interpretador tan pronto como la
función finaliza
 Variables Globales son aquellas definidas fuera de cualquier
función
 SI dos variables tienen el mismo nombre, pero una es global y la
otra local, la precedenciala tiene la local
Functions
 El pase de argumentos
 Un argumento no es más que un datos que es pasado a
una función, cuando esta es llamada
 Una función puede tomar cualquier número de
argumentos o ninguno.
 SI desea pasar argumentos a una función, se debe definir
primero los parámetros en la declaración.
 Un parámetro es simplemente una variable en el
encabezado de la función la cual recibe un argumento
cuando es llamada
 El alcance de los parámetros está restringido al cuerpo de
la función
Functions
 El pase de argumentos
 En Python todo es un objeto, por lo que la variable lo que
guarda es una referencia al objeto.
 La variable como tal no contiene al objeto, sino la
dirección donde este se encuentra
 Por simplicidad se dice que el valor del argumento es
pasado a la variable parámetro, a esto se le llama Pase
por Valor
Functions
 El pase de argumentos
 El Pase por Valor, tiene dos consecuencias:
1. Si el argumento pasado a la función es inmutable, los cambios
hechos a la variable parámetro no afectan el argumento
2. Ahora, si el argumento pasado a la función es mutable, los
cambios hechos a la variable parámetro afectarán al
argumento

arg1
100

140715950137472
para1
Functions
 Argumentos de posición y de palabra clave
 En el pase de argumentos de posición se considera el
orden de su respetivo parámetro del encabezado de la
función
 Al pasarlos por palabra clave, se le asigna al nombre del
parámetro el valor del argumento, de la manera
siguiente: nombre_parámetro = val
 El pase de argumentos por palabra clave flexibiliza el uso
de las funciones, pero debemos conocer el nombre de los
parámetros.
 Además se puede mezclar ambas forma de pase de
argumentos, siempre y cuando el de posición esté antes
que el de palabra clave
Functions
 Argumentos indeterminados
 Por posición, se debe crear un lista dinámica de
argumentos:
def indeterminados_posicion(*args):
for arg in args:
print(arg)
indeterminados_posición(5, “Hola”, [1, 2, 3, 4, 5])
 Por nombre, se crea un diccionario dinámico de
argumentos:
def indeterminados_nombre(**kwargs):
print(kwarg)
indeterminados_posición(n=5, c=“Hola”, l=[1, 2, 3, 4, 5])
Functions
 Retorno de valores
 Para retornar un valor se usa la palabra return
return [expresión], si se omite la expresión a None es retornado
 Si una función retorna un valor este puede ser usado
como operando de cualquier expresión
 Las funciones que no tienen la palabra return se dicen que
son funciones void
 Las funciones void siempre retornan None
 En Python se puede retornar más de un valor:
return val1, val2, …, valN
Functions
 Retorno de valores
 En Python se puede se puede asignar valores predeterminados
a los parámetros
 Simplemente se usa el operador de asignación al parámetro
con un valor predeterminado:
par1 = valor
Functions

Fin parte 1
Functions
 Programación funcional (introducción)
 Functional programming es el proceso de construcción de
software mediante la composición de funciones, evitando el
estado compartido, los datos mutables y los efectos
secundarios.
 La programación funcional es declarativa más que imperativa,
el estado de la aplicación fluye a través de sólo funciones.
 La programación funcional contrasta con la programación
orientada a objeto donde el estado de la aplicación es
usualmente compartida y colocada con los métodos en objetos
 La programación funcional es un paradigma, significando que
es una forma de pensar acerca de la construcción del software
basado en algún fundamento y la definición de principios
(indicados antes)
 Referencia: https://www.realpython.com/Python-lambda
Functions
 Programación funcional (introducción)
 En Python se cuenta con tres funciones que facilitan un
acercamiento a la programación funcional:
 Map
 Filter
 Reduce
Functions
 Programación funcional (introducción)
 En Python se cuenta con tres funciones que facilitan un
acercamiento a la programación funcional:
 Map
 Filter
 Reduce

 Además del uso de lambdas


 Compresión de List (ya visto)
Functions
 Programación funcional (introducción)
 Lambdas:
 Son funciones de una línea.
 También son conocidas como funciones anónimas, ya que
no poseen un nombre
 Usan un constructor: lambda, parecido a como se hace con
def
 Sintaxis:
lambda arg1, arg2, …, argN : expresión usando los argumentos
 lambda no incluye una sentencia return, está implícita
Functions
 Programación funcional (introducción)
 Lambdas, diferencias con def:
 lambda es una expresión, no una sentencia. Debido a esto
lambda puede aparecer en lugares donde def no es
permitida. Como expresión lambda retorna un valor que
ocasionalmente puede tener un nombre. En contraste la
sentencia def siempre asigna un nombre a la función
definida en el header.
 El body de un lambda es una simple expresión, no un bloque
de sentencias. Debido a que lambda es limita a una
expresión es menos genérica que def.
 lambda es diseñada para codificar funciones simples,
mientras que def para realizar trabajos más grandes
Functions
 Programación funcional (introducción)
 Lambdas, ¿por qué usarlas?:
 Su poder radica en que pueden ser usadas como funciones
anónimas dentro de otra función
 lambdas pueden ser usadas como una función resumida
que nos permite ser embutirla en el código.
 Los lambdas también se utilizan comúnmente para codificar
jump tables, que son listas o diccionarios de acciones que se
realizan bajo demanda.
 Los argumentos de un lambda también acepta valores
predefinidos.

 ver ejemplos
Functions
 Programación funcional (introducción)
 Map: es utilizado para aplicar una operación a cada elemento
de una lista y obtener el resultado.
 Esto se puede hacer con un loop, en programación imperativa
 Se utilizan más expresiones
 La sintaxis de map es:
map(función_a_aplicar, secuencia)
 Map, Lo que hace es pasar como argumento una función que
es aplicada a cada elemento del objeto iterable y retorna una
lista con el resultado de la función llamada.
Functions
 Programación funcional (introducción)
 filter: como su nombre lo sugiere, filter crea una lista de
elementos para los que la función que se ejecuta retorna True
 Sintaxis:
filter(función, secuencia)
 Es equivalente al comprehensión:
item for item in iterable if function(item)
 También se puede realizar la operación con un loop for, pero al
usar filter la operación se ejecuta más rápido

 Ver ejemplos
Functions
 Programación funcional (introducción)
 reduce: esta función muy útil para realizar cálculos de una lista y
retornar un simple resultado.
 Aplica un cálculo rotativo a los pares secuenciales de valores
de una lista
 No está incluida en la funciones predeterminadas de Python,
por lo que hay que importarla desde el módulo functools:
from functools import reduce
 Sintaxis:
reduce(función, secuencia)

 Ver ejemplos
Functions

Fin parte 2
Generators
 Conceptos
 Las funciones generadoras se incluyen en todos los aspectos,
como las funciones normales, con una diferencia: en lugar de
recoger los resultados y devolverlos de una vez, pueden iniciar
el cálculo, producir un valor, suspender su estado guardando
todo lo que necesitan para poder reanudar y, si se les llama de
nuevo, reanudar y realizar otro paso. Las funciones generadoras
se convierten automáticamente en sus propios iteradores por
Python, de modo que usted puede llamar next en ellos.
Generators
Diferencias con funciones normales:
 Las funciones generadoras no almacenan los resultados
anteriores, ni los futuros, sólo recuerdan el último valor
 Una función normal retorna None al finalizar su ejecución,
una función generadora emite una exception llamada
StopIteration
 Para devolver el valor, en vez de usar return, usan yield
Ver ejemplo
Generadores
 Son muy poderosos, ya que una vez creados, pueden ser
usados en cualquier mecanismo de iteración que se desee
 Al devolver sólo el último valor calculado, no consumen
memoria y tiempo, como lo harían las listas con todos los
valores.
 Es posible usar return, también en una función generadora,
Generadores
 Usando la expresion yield from:
Esta forma de uso permite producir valores desde un sub-
iterator. (ver ejemplo)
Generators
Generadores y lambdas
 Se pueden hacer generadores usando lambdas y
compresiones de listas o tuplas, por ejemplo:

cubes = [x**3 for x in range(10)]


odd_cubes1 = filter(lambda cube: cube % 2, cubes)
odd_cubes2 = (cube for cube in cubes if cube % 2)
Fin de funciones

También podría gustarte