¿cómo puedo hacer una cadena de la función de los decoradores en python?
¿cómo puedo hacer que dos de los decoradores en python que sería el siguiente?@makebold @makeitalic def say(): return 'hello' que debe devolverhello no estoy tratando de hacer html de esta manera, en una aplicación real, tratando de entender cómo decoradores y decorador de encadenamiento de las obras.
echa un vistazo a la documentación para ver cómo decoradores de trabajo. aquí es lo que usted solicitó:def makebold(fn): def wrapped(): return '' + fn() + '' return wrapped def makeitalic(fn): def wrapped(): return '' + fn() + '' return wrapped @makebold @makeitalic def hello(): return 'hello world' print hello() ## returns hello world
<p>para comprender lo que hace <code>yield</code>, debe comprender qué <em>generadores</em> son. y antes de que lleguen los generadores <em>iterables</em>.</p><h2>iterables</h2><p>cuando creas una lista, puedes leer sus artículos uno por uno. la lectura de sus elementos uno por uno se llama iteración:</p><pre><code>&gt;&gt;&gt; mylist = [1, 2, 3] &gt;&gt;&gt; for i in mylist: ... print(i) 1 2 3 </code></pre><p><code>mylist</code> es un <em>iterable</em>. cuando usas una comprensión de lista, creas una lista, y por lo tanto una iterable:</p><pre><code>&gt;&gt;&gt; mylist = [x*x for x in range(3)] &gt;&gt;&gt; for i in mylist: ... print(i) 0 1 4 </code></pre><p>todo lo que puede usar &quot;<code>for... in...</code>&quot; en es iterable; <code>lists</code>, <code>strings</code>, archivos ...</p><p>estos iterables son útiles porque puede leerlos tanto como desee, pero almacena todos los valores en la memoria y esto no siempre es lo que desea cuando tiene muchos valores.</p><h2>generadores</h2><p>los generadores son iteradores, una clase de iterable<strong> solo puedes iterar una vez </strong>. los generadores no almacenan todos los valores en la memoria,<strong> generan los valores sobre la marcha </strong>:</p><pre><code>&gt;&gt;&gt; mygenerator = (x*x for x in range(3)) &gt;&gt;&gt; for i in mygenerator: ... print(i) 0 1 4 </code></pre><p>es igual, excepto que usaste <code>()</code> en lugar de <code>[]</code>. pero, usted<strong> no puede </strong>realizar <code>for i in mygenerator</code> por segunda vez, ya que los generadores solo se pueden usar una vez: calculan 0, luego se olvidan y calculan 1, y terminan de calcular 4, uno por uno.</p><h2>rendimiento</h2><p><code>yield</code> es una palabra clave que se usa como <code>return</code>, excepto que la función devolverá un generador.</p><pre><code>&gt;&gt;&gt; def creategenerator(): ... mylist = range(3) ... for i in mylist: ... yield i*i ... &gt;&gt;&gt; mygenerator = creategenerator() # create a generator &gt;&gt;&gt; print(mygenerator) # mygenerator is an object! &lt;generator object creategenerator at 0xb7555c34&gt; &gt;&gt;&gt; for i in mygenerator: ... print(i) 0 1 4 </code></pre><p>este es un ejemplo inútil, pero es útil cuando sabes que tu función devolverá un gran conjunto de valores que solo necesitarás leer una vez.</p><p>para dominar <code>yield</code>, debe comprender que<strong> cuando llama a la función, el código que ha escrito en el cuerpo de la función no se ejecuta. </strong>la función solo devuelve el objeto generador, esto es un poco complicado :-)</p><p>luego, su código continuará desde donde lo dejó cada vez que <code>for</code> usa el generador.</p><p>ahora la parte difícil:</p><p>la primera vez que <code>for</code> llama al objeto generador creado desde su función, ejecutará el código en su función desde el principio hasta que llegue a <code>yield</code>, luego devolverá el primer valor del bucle. luego, cada una de las otras llamadas ejecutará el bucle que ha escrito en la función una vez más y devolverá el siguiente valor, hasta que no haya ningún valor para devolver.</p><p>el generador se considera vacío una vez que se ejecuta la función, pero ya no golpea <code>yield</code>. puede ser porque el bucle llegó a su fin, o porque ya no satisfaces un <code>"if/else"</code>.</p><hr><h2>tu codigo explicado</h2><p>generador:</p><pre><code># here you create the method of the node object that will return the generator def \_get\_child\_candidates(self, distance, min\_dist, max\_dist): # here is the code that will be called each time you use the generator object: # if there is still a child of the node object on its left # and if distance is ok, return the next child if self.\_leftchild and distance - max\_dist &lt; self.\_median: yield self.\_leftchild # if there is still a child of the node object on its right # and if distance is ok, return the next child if self.\_rightchild and distance + max\_dist &gt;= self.\_median: yield self.\_rightchild # if the function arrives here, the generator will be considered empty # there is no more than two values: the left and the right children </code></pre><p>llamador:</p><pre><code># create an empty list and a list with the current object reference result, candidates = list(), [self] # loop on candidates (they contain only one element at the beginning) while candidates: # get the last candidate and remove it from the list node = candidates.pop() # get the distance between obj and the candidate distance = node.\_get\_dist(obj) # if distance is ok, then you can fill the result if distance &lt;= max\_dist and distance &gt;= min\_dist: result.extend(node.\_values) # add the children of the candidate in the candidates list # so the loop will keep running until it will have looked # at all the children of the children of the children, etc. of the candidate candidates.extend(node.\_get\_child\_candidates(distance, min\_dist, max\_dist)) return result </code></pre><p>este código contiene varias partes inteligentes:</p><ul> <li><p>el bucle se repite en una lista, pero la lista se expande mientras se repite el bucle :-) es una forma concisa de revisar todos estos datos anidados, aunque sea un poco peligroso, ya que puede terminar con un bucle infinito. en este caso, <code>candidates.extend(node.\_get\_child\_candidates(distance, min\_dist, max\_dist))</code> agota todos los valores del generador, pero <code>while</code> sigue creando nuevos objetos generadores que producirán valores diferentes de los anteriores ya que no se aplica en el mismo nodo.</p></li> <li><p>el método <code>extend()</code> es un método de objeto de lista que espera un iterable y agrega sus valores a la lista.</p></li> </ul><p>usualmente le pasamos una lista:</p><pre><code>&gt;&gt;&gt; a = [1, 2] &gt;&gt;&gt; b = [3, 4] &gt;&gt;&gt; a.extend(b) &gt;&gt;&gt; print(a) [1, 2, 3, 4] </code></pre><p>pero en tu código recibe un generador, lo cual es bueno porque:</p><ol> <li>no necesitas leer los valores dos veces.</li> <li>es posible que tenga muchos hijos y no quiera que todos se almacenen en la memoria.</li> </ol><p>y funciona porque a python no le importa si el argumento de un método es una lista o no. python espera iterables por lo que trabajará con cadenas, listas, tuplas y generadores. esto se llama tipificación de pato y es una de las razones por las que python es tan genial. pero esta es otra historia, para otra pregunta ...</p><p>puede detenerse aquí, o leer un poco para ver un uso avanzado de un generador:</p><h2>controlando el agotamiento de un generador.</h2><pre><code>&gt;&gt;&gt; class bank(): # let's create a bank, building atms ... crisis = false ... def create\_atm(self): ... while not self.crisis: ... yield "$100" &gt;&gt;&gt; hsbc = bank() # when everything's ok the atm gives you as much as you want &gt;&gt;&gt; corner\_street\_atm = hsbc.create\_atm() &gt;&gt;&gt; print(corner\_street\_atm.next()) $100 &gt;&gt;&gt; print(corner\_street\_atm.next()) $100 &gt;&gt;&gt; print([corner\_street\_atm.next() for cash in range(5)]) ['$100', '$100', '$100', '$100', '$100'] &gt;&gt;&gt; hsbc.crisis = true # crisis is coming, no more money! &gt;&gt;&gt; print(corner\_street\_atm.next()) &lt;type 'exceptions.stopiteration'&gt; &gt;&gt;&gt; wall\_street\_atm = hsbc.create\_atm() # it's even true for new atms &gt;&gt;&gt; print(wall\_street\_atm.next()) &lt;type 'exceptions.stopiteration'&gt; &gt;&gt;&gt; hsbc.crisis = false # the trouble is, even post-crisis the atm remains empty &gt;&gt;&gt; print(corner\_street\_atm.next()) &lt;type 'exceptions.stopiteration'&gt; &gt;&gt;&gt; brand\_new\_atm = hsbc.create\_atm() # build a new one to get back in business &gt;&gt;&gt; for cash in brand\_new\_atm: ... print cash $100 $100 $100 $100 $100 $100 $100 $100 $100 ... </code></pre><p><strong> nota: </strong>para python 3, use<code>print(corner\_street\_atm.\_\_next\_\_())</code> o <code>print(next(corner\_street\_atm))</code></p><p>puede ser útil para varias cosas como controlar el acceso a un recurso.</p><h2>itertools, tu mejor amigo.</h2><p>el módulo de itertools contiene funciones especiales para manipular iterables. ¿alguna vez desea duplicar un generador? ¿encadenar dos generadores? ¿agrupar valores en una lista anidada con una sola línea? <code>map / zip</code> sin crear otra lista?</p><p>entonces solo <code>import itertools</code>.</p><p>¿un ejemplo? veamos las posibles órdenes de llegada para una carrera de cuatro caballos:</p><pre><code>&gt;&gt;&gt; horses = [1, 2, 3, 4] &gt;&gt;&gt; races = itertools.permutations(horses) &gt;&gt;&gt; print(races) &lt;itertools.permutations object at 0xb754f1dc&gt; &gt;&gt;&gt; print(list(itertools.permutations(horses))) [(1, 2, 3, 4), (1, 2, 4, 3), (1, 3, 2, 4), (1, 3, 4, 2), (1, 4, 2, 3), (1, 4, 3, 2), (2, 1, 3, 4), (2, 1, 4, 3), (2, 3, 1, 4), (2, 3, 4, 1), (2, 4, 1, 3), (2, 4, 3, 1), (3, 1, 2, 4), (3, 1, 4, 2), (3, 2, 1, 4), (3, 2, 4, 1), (3, 4, 1, 2), (3, 4, 2, 1), (4, 1, 2, 3), (4, 1, 3, 2), (4, 2, 1, 3), (4, 2, 3, 1), (4, 3, 1, 2), (4, 3, 2, 1)] </code></pre><h2>entendiendo los mecanismos internos de iteración.</h2><p>la iteración es un proceso que implica iterables (implementación del método <code>\_\_iter\_\_()</code>) e iteradores (implementación del método <code>\_\_next\_\_()</code>). iterables son cualquier objeto de los que puede obtener un iterador. los iteradores son objetos que le permiten iterar en iterables.</p><p>hay más información al respecto en este artículo sobre <a href="http://effbot.org/zone/python-for-statement.htm">cómo funcionan <code>for</code> loops</a> .</p> <p>la implementación <a href="https://pypi.org/project/markdown/">markdown en python</a> tiene soporte para extensiones, una de las cuales incluye la generación de tabla de contenido. además <a href="http://johnmacfarlane.net/pandoc/">pandoc</a> (que es un marcado de haskell-&gt; pdf tiene soporte para markdown (además de un montón de otros formatos) y puede generar bastante html, latex, pdf, etc.</p> Funcionaria con la fórmula concatenar, pero así la estas usando mal.  
Tendrías que en la columna c, concatenar a y b, y luego en otra celda:  
la formula =CONTAR.SI(C:C;"A0").  
La otra, para no concatenar en la columna C, seria hacer una fórmula personalizada.  
Si te interesa así, te digo como hacerla, si no sabes claro.  
Carlos Leal Puedes usar un “=Contar.Si(B:B,A1)” y arrastras, filtras en c todo lo que sea superior a 1 y esos son tus duplicados. Hola la misma que le ponga al procesador saludos los conectores (también llamados nexos o relaciones) son frases o palabras que se utilizan para conectar o vincular una idea con otra en un texto (oral u escrito). los conectores permiten que el texto tenga una estructura lógica y coherente, y su ausencia o su mala utilización vuelven difícil la comprensión de las ideas.

tipos de conectores con ejemplos:

conectores de causa. determinan causalidad, por ejemplo: dado que, debido a, gracias a, por culpa de, porque, puesto que.

conectores copulativo. unen expresiones, por ejemplo: y, e, ni.

conectores disyuntivos. unen expresiones que plantean dos opciones contrapuestas, por ejemplo: o, u.

conectores de argumentación. se utilizan para explicar un argumento, por ejemplo: a saber, de lo contrario, por otra parte, sobre todo, por último.

conectores de cronología. determinan el orden de las acciones, por ejemplo: en primer lugar, ante todo, finalmente, luego, más tarde.

conectores de consecuencia. determinan consecuencia, por ejemplo: a fin de, de manera que, entonces, por consiguiente, por eso.

conectores de referencia. se utilizan para establecer las relaciones entre conceptos, por ejemplo: de esta manera, en cuanto a, en lo que respecta, respecto de, según.

conectores de resumen. introducen la síntesis de la información, por ejemplo: en pocas palabras, en resumen, resumiendo, para resumir, en concreto.

conectores de temporalidad. indican la temporalidad de la acción, por ejemplo: ahora, antes, apenas, en aquel tiempo, hoy en día, hasta.

conectores de oposición o adversativos. unen partes contrapuestas, por ejemplo: al contrario, aunque, a pesar de, no obstante, pero, sin embargo.

conectores de ilustración o explicativos. introducen la explicación de lo anteriormente dicho, por ejemplo: en otras palabras, por ejemplo, o sea, es decir, así.

conectores de condición. expresan condición, por ejemplo: en caso de que, siempre que, suponiendo que, si, con tal que.

conectores de comparación. introducen una comparación entre los elementos o entre dos oraciones, por ejemplo: más que, menos que, a diferencia de.

conectores concesivos. introducen un condicionamiento que puede ser sorteado o superado, por ejemplo: aunque, a pesar de, pese a.

conectores de lugar. introducen el escenario en el que se desarrolla la acción, por ejemplo: donde, en donde, adonde.

conectores de modo. introducen la manera en la que se lleva a cabo la acción, por ejemplo: según, tal como, así como.

ejemplos de conectores:

a fin de

entonces

a saber

para terminar

por otra parte

en seguida

en concreto

de tal manera que

en cambio

al principio

con la condición de que

por último

con el objeto de

además

primeramente

en cuanto a esto

brevemente

al mismo tiempo

gracias a

una vez

en caso de que

en lo que respecta

por más que

antes

siempre que

en conclusión

de esta manera

ahora

en aquel tiempo

con tal que

acto seguido

en primer lugar

respecto a

finalmente

en nuestros días

a consecuencia de

cuando

sobre todo

desde entonces

érase una vez

primero

en cuanto a

en este caso

por eso

en pocas palabras

aunque

para resumir

a pesar de

resumiendo

por lo tanto

respecto de

segundo

de lo contrario

en aquellos días

hasta

más tarde

es decir

actualmente

una vez que

puesto que

en segundo lugar

desde

suponiendo que

mientras tanto

en otras palabras

tan pronto como

hoy en día

tercero

sin embargo

si

al respecto

pero

al contrario

según

antes que nada

por culpa de

en tercer lugar

de manera que

para

por ejemplo

ya que

como

cuarto

mientras que

de esa manera

o sea

por consiguiente

no obstante

debido a

mientras

en cuarto lugar

así

porque

dado que

por una parte

visto que

ahora que

ejemplos de oraciones con conectores:

pienso, luego existo.

fueron a la fiesta después del examen.

viajaron a méxico durante el receso de vacaciones.

en pocas palabras, es el hombre más afortunado del mundo.

quisieron ayudarlo, aunque no había nada que hacer.

para resumir, todo salió como lo esperaban.

en resumen, nos prohibieron el acceso por dos semanas.

ante todo, pedimos disculpas a los afectados.

apenas consiga un trabajo, comenzaré a ahorrar.

para empezar, quisiera agradecer a los aquí presentes. mandale flores con algunos globos y en la tarjeta escribe que eres su admirador secreto y escribes tu nombre , después ve a verla y veras como reacciona si lo hace positivamente ya la hiciste !!! Debes crear un nuevo módulo con este contenido:  
Function cantidad\_minutos(texto As String)  
Dim horas, minutos, segundos As Integer  
horas = Left(texto, 3)  
minutos = Mid(texto, 4, 2)  
segundos = Right(texto, 2)  
cantidad\_minutos = Str(horas * 60 + minutos + segundos / 60)  
End Function  
Luego creas una consulta con el campo duracion y uno generado que sea =cantidad\_minutos([duracion])  
Debes verificar que la cantidad de caracteres sea uniforme (3 para la hora, 2 minutos y 2 para segundos, para que la función sea correcta.  
Saludos. Jorge la redonda es en done limas perefectamente bien las esquinas y queda como de "bolita" y la de almendra es donde limas las esquinas un poco pero dejas punta, y te queda redonda de la base y termina la punta en reduccion. rojo y amarillo=positivo negro=negativo dos verdes=parlante dos blanco=parlante dos gris=parlante dos violeta=parlante... fíjate si coinciden los colores.