@JackNavaRow Sí. Los diccionarios python son muy eficientes
Entre otras cosas porque los usa internamente el intérprete para todo. Los atributos de un objeto, los métodos de una clase, las variables definidas en un entorno, el marco de pila... todo son diccionarios
En la última, encima, preserva el orden de inserción y esta característica ha pasado a formar parte oficial del lenguaje, de modo que no va a cambiar en futuras versiones
Algo distinto a lo visto:
Defines tu Operaciones que hacen (funciones)
Asignas un objeto la operación que deseas hacer
Llamas a la función la operación que quieres hacer
Por ultimo para evitar buscar el primer valor lo asigno inicialmente con el calculo
operaciones[arreglo[1]](arreglo[0],ar...
estuve como media hora para poder resolver un ejercicio, y un monstruo lo resolvió en 2 lineas..
codewars.com/kata/578aa45ee9fd15ff4600090d/train/python
from collections import deque
def sort_array2(array):
odd = deque(sorted(x for x in array if x % 2))
return [odd.popleft() if x % 2 else x for x in array]
@JackNavaRow no he leído todo el código, pero imagino que está bien estructurado. Lamentablemente el OP no habla de una precedencia estándar, solo indica que las operaciones se realicen de izquierda a derecha. Eso hace sangrar mis ojos.
@LucasDamian Yo no conocía C#, y el resto de lenguajes que usaba no tenían foreach. Echaba de menos esa funcionalidad. Luego se lo añadieron a Java (y creo que a JavaSript también)
Sólo quería saber eso, si existe una diferencia significativa entre utilizar un for normal y un for-in al momento de recorrer un Array.
Me surgió la cuestión debido a que estaba realizando una revisión a un viejo proyecto (donde utilizaba for-in) y estaba leyendo el articulo de una web que lo p...
@JackNavaRow de todas formas cuidado con for. Es un caso de reusar un mismo keyword para dos cosas diferentes. Uno de los usos es para hacer bucles. O sea for variable in iterable: que luego va seguido del cuerpo. Esto es como el foreach de otros lenguajes
El otro uso es para comprensiones de listas que es eso de [x for x in C]. Eso no es un bucle. Es una expresión
una expresión que produce como resultado una lista. Han usado la misma palabra for porque es la que mejor encaja ahí, pero conceptualmente es otra cosa. El primer caso de for es una sentencia, pero este es una expresión de un tipo especial
también el for puede aparecer en lo que se llaman expresiones generadoras
expresion_generadora = (x**2 for x in range(100))
for dato in expresion_generadora:
print(dato)
observa que hay paréntesis y no corchetes alrededor de la expresión generadora. El resultado no es ahora una lista, sino un generador, Los elementos no se crean y se guardan en la primera línea, sino que se van creando a medida que se van extrayendo luego en el for
es lazy
el generador de este modo no consume memoria. En vez de range(100) podría haber puesto range(10000000) y funcionaría ocupando la misma memoria
no así si fuera una list comprehension, pues la lista resultante tendría 100 elementos en el primer caso, pero 1000000 en el segundo
@JackNavaRow bueno, pues aprovechemos que ves la expresión generadora para cerrar. Una list comprehension no es más que una expresión generadora, convertida en lista. Es decir [x**2 for x in range(100)] equivale a list(x**2 for x in range(100))
Esto causa internamente que el constructor de list() haga next() sobre la expresión generadora para ir obteniendo elementos y los va guardando todos en una lista que es lo que finalmente retorna
Para armar la petición usando http.request de NodeJS debes entender la solicitud AJAX para poder replicarla en Node.
Básicamente realizas una solicitud de tipo GET, a una URL dada. En dicha solicitud envías una cabecera de autorización personalizada la cual contiene el token. Además esperas que ...
no es un for que los vaya añadiendo uno a uno. Es una expresión que directamente genera la lista completa
también es azucar sintáctico en realidad, ya que lo mismo puedes hacer con un bucle for corriente y lista.append()
en general lista = [expresion for variable in iterable if condicion] (que es la forma más general de una list_comprehension) no es más que azúcar sintáctico para el bucle más convencional siguiente:
lista = []
for variable in iterable:
if condicion:
lista.append(expresion)
así, para generar una lista con los múltiplos de 3 menores de 100, harías [x for x in range(100) if x%3==0]
cuando ese último for hace next()para obtener el siguiente elemento, es cuando se evalúa por primera vez el x%3, se genera el primer elemento del primero generador, que sale 0, luego se evalúa el x**2 del segundo, que sale 0, se imprime el 0, y luego se descarta todo antes de pasar a la siguiente iteración. Ninguno de esos datos está ocupando memoria más allá de una iteración
@JackNavaRow Pues sí, depende. Si usas "filtro" (lo de poner un if dentro de la expresión), la lista final tendrá menos elementos, así que vale más convertirlo en lista al final y no al principio, para ahorrar memoria
@JackNavaRow Por cierto, antes te dije que las "list comprehension" eran simple syntactic sugar equivalente a un for "normal" que hiciera .append() para ir añadiendo a la lista. No es del todo cierto. La "list comprehension" es más rápida por la forma en que se convierte a bytecode
Un antipatrón que he visto por ahi bastante, entre quienes acaban de descubrir las list comprehension y se emocionan demasiado con ellas (y quizás las confunden con los for), es el siguiente:
[ print(x) for x in lista ]
en vez de
for x in lista:
print(x)
¿por qué es un antipatrón? (ejercicio para el lector)
Supon que lista tiene [1,2,3,4] y el usuario hizo esa comprensión para imprimir los valores, en vez de un bucle for normal ¿por qué no es (formalmente) correcto?
@JackNavaRow Claro! Porque lo que está generando esa expresión es la lista de valores retornados por print() para cada elemento de la lissta
Y print() es void...
piensa en [math.sqrt(x) for x in lista]
puedes usar llamadas a funciones en la expresión, si lo que quieres es los resultados devueltos por esas funciones. Pero no tiene sentido con print() porque no devuelve nada
y la expresión [print(x) for x in range(1000000)], imprimirá un millón de números, sí. Pero también creará una lista con un millón de None, para nada
@JackNavaRow El primero tiene como objetivo fundamental crear una lista. ¿Con qué valores? Con los que vayan saliendo al evaluar la expresión que se da tras abrir corchete. Esa expresión es print(), que devuelve None, así que irá guardando todos esos None en una lista
El objetivo es crear listas, pero en este caso lo estábamos usando mal, pues no queremos crear una lista, sino imprimir los contenidos de otra
@fredyfx Tengo un proyecto que tiene data, bussines, Entities y Los controladores en C# las vistas las manejo en angular que tipo de arquitectura sera ese proyecto ?
de los sistemas más crítico que he visto, 2 capas: datos y presentación, a veces en la capa de datos la lógica de negocio, a veces en la presentación... y aún así funcionaba esa empresa
La programación por capas es un modelo de desarrollo software en el que el objetivo primordial es la separación (desacoplamiento) de las partes que componen un sistema software o también una arquitectura cliente-servidor: lógica de negocios, capa de presentación y capa de datos. De esta forma, por ejemplo, es sencillo y mantenible crear diferentes interfaces sobre un mismo sistema sin requerirse cambio alguno en la capa de datos o lógica.
La ventaja principal de este estilo es que el desarrollo se puede llevar a cabo en varios niveles y, en caso de que sobrevenga algún cambio, solo afectará al…
Sé que WPF me sirve para eso, quiero hacerlo con MVC, consulté con un compañero del trabajo y me dice que la única forma de hacer eso es con silverlight, pero que no es nada recomendable