Herramientas de usuario

Herramientas del sitio


script:python:new:advanced

Diferencias

Muestra las diferencias entre dos versiones de la página.

Enlace a la vista de comparación

Ambos lados, revisión anterior Revisión previa
Próxima revisión
Revisión previa
script:python:new:advanced [2013/09/15 11:08]
alfred [Decorators]
script:python:new:advanced [2020/05/09 09:25] (actual)
Línea 54: Línea 54:
 users_first_names = {user.first_name for user in users} users_first_names = {user.first_name for user in users}
 other = {x+x for x in '​patata'​} # -> {'​pp',​ '​aa',​ '​tt'​} other = {x+x for x in '​patata'​} # -> {'​pp',​ '​aa',​ '​tt'​}
 +</​code>​
 +También puedes anidarlas:
 +<code python>
 +matrix = [[1, 2], [3, 4]]
 +[1, 2, 3, 4]
 </​code>​ </​code>​
 ==== Generators ==== ==== Generators ====
Línea 233: Línea 238:
  
 === *args y **kwargs === === *args y **kwargs ===
-Para acceder a los parámetros de una llamada aprovecharemos ''​*args''​ (que contiene los parámetros por defecto de la función) y ''​**kwargs''​ (los especificados no por defecto en forma de diccionario). Puedes mirar el [[script:​python:​new:​language#​funciones|apartado de funciones]].+Para acceder a los parámetros de una llamada aprovecharemos ''​*args''​ (que contiene los parámetros por defecto de la función) y ''​<​nowiki>​**kwargs</​nowiki>​''​ (los especificados no por defecto en forma de diccionario). Puedes mirar el [[script:​python:​new:​language#​funciones|apartado de funciones]].
  
 === Wraps en functools === === Wraps en functools ===
Línea 269: Línea 274:
 class Person(object):​ class Person(object):​
     pass     pass
 +</​code>​
 +
 +=== O clases de decoradores ===
 +<code python>
 +class IdentityDecorator(object):​
 +    def __init__(self,​ func):
 +        self.func = func
 +    def __call__(self):​
 +        self.func()
 +@IdentityDecorator
 +def a_function():​
 +    print "​I'​m a normal function."​
 +</​code>​
 +
 +=== Argumentos a decoradores ===
 +<code python>
 +from functools import wraps
 +def argumentative_decorator(gift):​
 +    def func_wrapper(func):​
 +        @wraps(func)
 +        def returned_wrapper(*args,​ **kwargs):
 +            print "I don't like this " + gift + " you gave me!"
 +            return func(gift, *args, **kwargs)
 +        return returned_wrapper
 +    return func_wrapper
 +@argumentative_decorator("​sweater"​)
 +def grateful_function(gift):​
 +    print "I love the " + gift + "! Thank you!"
 +grateful_function()
 +# >> I don't like this sweater you gave me!
 +# >> I love the sweater! Thank you!
 +</​code>​
 +<code python>
 +from functools import wraps
 +GLOBAL_NAME = "​Brian"​
 +def print_name(function=None,​ name=GLOBAL_NAME):​
 +    def actual_decorator(function):​
 +        @wraps(function)
 +        def returned_func(*args,​ **kwargs):
 +            print "My name is " + name
 +            return function(*args,​ **kwargs)
 +        return returned_func
 +    if not function: ​ # User passed in a name argument
 +        def waiting_for_func(function):​
 +            return actual_decorator(function)
 +        return waiting_for_func
 +    else:
 +        return actual_decorator(function)
 +@print_name
 +def a_function():​
 +    print "I like that name!"
 +@print_name(name='​Matt'​)
 +def another_function():​
 +    print "Hey, that's new!"
 +a_function()
 +# >> My name is Brian
 +# >> I like that name!
 +another_function()
 +# >> My name is Matt
 +# >> Hey, that's new!
 </​code>​ </​code>​
  
Línea 288: Línea 353:
  
 === Notas === === Notas ===
 +  * [[https://​wiki.python.org/​moin/​PythonDecoratorLibrary|Decorators library]]
 +  * [[http://​code.activestate.com/​search/​recipes/#​q=decorator|Búsqueda en la decorators library]]
 +
 +==== Unicode ====
 +Para poder escribir por consola unicode:
 +<code python>
 +import sys
 +reload(sys)
 +sys.setdefaultencoding('​utf-8'​)
 +</​code>​
 ===== El lenguaje ===== ===== El lenguaje =====
 Python trabaja internamente con objetos. Pocos son los datos que se guardan como valores y lo que comunmente denominamos "​variables"​ serían mejor llamadas "​nombres"​. Y es que una asignación es un enlace de un nombre a un objeto. ​ Python trabaja internamente con objetos. Pocos son los datos que se guardan como valores y lo que comunmente denominamos "​variables"​ serían mejor llamadas "​nombres"​. Y es que una asignación es un enlace de un nombre a un objeto. ​
script/python/new/advanced.1379243281.txt.gz · Última modificación: 2020/05/09 09:24 (editor externo)