Bienevenidos sean a este post, hoy hablaremos sobre dos temas particulares de las funciones.
Atributos
Toda funcion es un objeto hecho y derecho y por lo tanto poseen atributos, algunos son especiales y pueden ser usados de manera introspectiva para inspeccionarlo durante la ejecucion, para entender el concepto vamos a analizar el siguiente ejemplo, primero crearemos un archivo al cual llamaremos atributos.py y le agregaremos el siguiente codigo:
atributos.py
def multiplicacion(a, b=1) :
"""Devuelve a multiplicado por b."""
return a * b
atributos_especiales = [
"__doc__", "__name__", "__qualname__", "__module__",
"__defaults__", "__code__", "__dict__", "__closure__",
"__annotations__", "__kwdefaults__",
]
for atributo in atributos_especiales :
print(atributo, '->', getattr(multiplicacion, atributo))
Primero vamos a crear una funcion llamada multiplicacion, en esta funcion multiplicaremos los valores recibidos y lo devolveremos por medio de return, tenemos una linea interesante que explicaremos mas adelante y se llama documentacion por ahora diremos que nos sirve para comentar que hace esta funcion, luego crearemos una lista para almacenar la identificacion de algunos de los atributos especiales que tenemos disponibles:
- __doc__, nos devuelve la documentacion
- __name__, nombre de la funcion
- __qualname__, idem al anterior pero provee una mejor denominacion en algunos casos
- __module__, nos indica que modulo esta siendo usado
- __defaults__, nos devuelve los valores predeterminados que establecimos
- __code__, nos indica cual es el codigo que utilizamos
- __dict__, nos devuelve los diccionarios creados
- __closure__, nos informa las variables encerradas en funciones anidadas
- __annotations__, nos indica las expresiones asociadas a los argumentos de las funciones
- __kwdefaults__, nos indica las palabra clave predeterminadas despues argumentos posicionales variables
Estos son algunos de los mas interesantes que podemos utilizar, luego tenemos un bucle for para pasar por todos estos atributos, en este bucle mostraremos el atributo y seguido del valor que corresponde a dicho atributo, para esto usaremos a getattr donde pasaremos el objeto o funcion y luego el atributo correspondiente, esto equivale a hacer obj.atributo pero de esta forma es mas monona y segura, con todo esto comentado podemos pasar a ejecutarlo para ver su salida:
tinchicus@dbn001vrt:~/python$ python3 atributos.py
__doc__ -> Devuelve a multiplicado por b.
__name__ -> multiplicacion
__qualname__ -> multiplicacion
__module__ -> __main__
__defaults__ -> (1,)
__code__ -> <code object multiplicacion at 0x7fb03ae8e540, file "atributos.py", line 1>
__dict__ -> {}
__closure__ -> None
__annotations__ -> {}
__kwdefaults__ -> None
tinchicus@dbn001vrt:~/python$
Como pueden ver nos devolvio los valores correspondiente a cada atributo, estos tipos de datos nos pueden ser utiles pero siempre dependiendo de la situacion estemos manejando, en este caso omite uno que puede ser muy interesante como es __globals__, si tienen curiosidad les recomiendo agregarla dentro de la lista y ver que datos nos devuelve, por ultimo para ver los atributos disponibles de una funcion u objeto deben usar la funcion dir, su sintaxis es:
dir(funcion)
Para verlo en accion hagamos el siguiente ejemplo:
>>> dir(print)
['__call__', '__class__', '__delattr__', '__dir__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__init_subclass__', '__le__', '__lt__', '__module__', '__name__', '__ne__', '__new__', '__qualname__', '__reduce__', '__reduce_ex__', '__repr__', '__self__', '__setattr__', '__sizeof__', '__str__', '__subclasshook__', '__text_signature__']
>>>
Como pueden ver nos devolvio todas los atributos disponibles en el mismo, funciona tanto con las funciones propias como las creadas por nosotros, con todo esto comentado pasemos al siguiente tema.
Funciones internas
Cuando hablamos de funciones internas nos referimos a las funciones basicas que estan incorporadas dentro del lenguaje y no necesitan ser importadas desde una libreria, si quieren saber cuales son las disponibles utilizaremos la funcion dir y el argumento __builtins__, esto nos devolvera solamente el listado con los nombres de los mismos pero a continuacion comentaremos algunos de los que ya utilizamos en algunos ejemplos anteriores:
- bin, convierte un numero en una cadena binaria
- bool, convierte un numero en valor booleano
- divmod, devuelve un valor tuple con la division y el resto de la division
- filter, nos permite contruir un objeto iterador
- float, convierte un numero en tipo flotante
- getattr, nos devuelve un valor del atributo informado
- id, devuelve el bloque de memoria donde esta el objeto
- len, devuelve el tamaño del objeto informado
- list, genera una lista con el iterador o los valores informados
- print, muestra el objeto pasado en pantalla
- type, nos devuelve el tipo de objeto
- zip, nos permite crear objetos de tipo clave-valor, en base a los tuples informados.
Como pueden ver estos son algunos de los que hemos visto durante el curso pero hay muchos mas disponibles que ante cualquier duda existe google =D
En resumen, hoy hemos hablado sobre los atributos de las funciones, para que se usan, que informacion almacenan, y como podemos obtenerla, despues hablamos sobre las funciones internas y una breve descripcion de las mismas, espero les haya sido util sigueme en tumblr, Twitter o Facebook para recibir una notificacion cada vez que subo un nuevo post en este blog, nos vemos en el proximo post.


Donación
Es para mantenimento del sitio, gracias!
$1.00
