[Python] Hilo general

Deoxys

#120 Gracias, le voy a echar un ojo :)

1 respuesta
Kaiserlau

#121 echale un vistazo tambien a lo q te puede ofrecer ffmpeg para descagar lo maximo posible el curro

ciza

Dice alguna que otra cosa interesante como los setter y el tema de los métodos privados. Totalmente recomentable en mi opinión.

1 respuesta
HeXaN

Si hablamos de vídeos, no podemos olvidarnos de este:

Cómo escupe código mientras habla, sin autocompletar ni llevar un guión preparado. Un crack.

1 1 respuesta
7 días después
ciza

Tengo una duda súper extraña, cuando aprendí python programe un código que resolvía sudokus. Me he encontrado con él por el HDD y estuve echando un vistazo para ver que cosas eran mejorables y tal.

Resulta que en este código, has de iterar por filas y columnas varias veces y tenía bastantes estructuras tipo:

for i in range(x):
    for j in range(x):
        do_stuff()

Entonces pensé que sería conveniente crear un generador y de ese modo evitar un montón de bucles innecesarios y un montón de tabs (quizá sea una chorrada pero bueno)

def square_coords( sz ):
    for i in range(sz):
        for j in range(sz):
            yield i,j

El caso es que si los anido, no funciona igual que con bucles separados. Es decir:

for idx_i in range(3):
    for idx_j in range(3):
        for i in range(3):
            for j in range(3):
                do_stuff()

No funciona igual que:


it1 = square_coords(3)
it2 = square_coords(3)

for idx_i, idx_j in it1:
    for i, j in it2:
        do_stuff()

EDITS

En cambio, probando con otros tipos de generadores no me pasa:

Something else, asi si que funciona:

for idx_i, idx_j in square_coords(3):
    for i, j in square_coords(3):
        do_stuff()
Solución
1 respuesta
Deoxys

#125
Y no es mejor

matriz=[[do_stuff(j) for j in i] for i in matriz]

Python hace las cosas muy fáciles si te dejas ;P

2 respuestas
ciza

#126 me da la impresión de que no. Se puede adaptar pero el problema es que do_stuff depende de los indices i,j.

En tu ejemplo, i serian listas o arrays y entonces no podrían pasarse a do_stuff como tal. Se puede adaptar como:

result=[[do_stuff(i,j) for j in range(matriz.shape[1])] for i in range(matriz.shape[0])]

O quiza como:

result=[[do_stuff(i,j) for j, _ in enumerate(i2)] for i, i2 in enumerate(matriz)]

Pero al final no se si me parece mucho mas útil que:

for i, j in square_coords(3):
    result[i,j] = do_stuff(i,j)
2 respuestas
MartiONE

#126 #127 Tener cuidado con esos single line, que luego es jodidamente imposible leerlos.

3 respuestas
ciza

#128 yo para códigos sencillos si que suelo hacer uso de ella, para cosas mas complejas procuro no hacerlo demasiado porque se convierte en un jaleo

1 respuesta
Kaiserlau

#128 #129 siempre y cuando se describa bien, a mi tambien me pasa de hacer for "i" o "x" xdd

HeXaN

#128 Si eres programador de Python, la comprensión de listas forma parte de tu ADN.

1 respuesta
MartiONE

#131 Hay un momento que vale la pena cambiar a los típicos for en varias lineas que montar un jaleo en una xD

1 respuesta
B

#132

Las listas de compresión se entienden perfectamente, no es un oneliner.

1 respuesta
MartiONE

#133 Me refiero a una dentro de otra sucesivamente, hay un momento en el que es completamente ilegible.

De hecho creo que a partir de 3 generalmente decido escribirlo como for normales, o es completamente ilegible. Sí yo también soy de los for "i", "x" xD

AikonCWD

Alguien me puede arrojar luz? http://www.mediavida.com/foro/dev/python-alternativa-al-switch-561130

HeXaN

Por si queréis ver la PyCon de este año:

https://www.youtube.com/channel/UCwTD5zJbsQGJN75MwbykYNw/videos

En especial esta:

1 respuesta
kritita

Me meto el hilo a favoritos, que voy a empezar con python. Gracias #1

B

las pycon las suelo seguir pero nunca encuentro nada que me llame

1 respuesta
Kaiserlau

#138 me gustan mas tipo #123 #124

me pongo a ver lo de #136 xd

B

voy a guardarme ese a ver

normalmemente siempre acabo viendo los que presentan herramientas y lo hacen un poco lento y me dan taquicardias ahí esperando

ciza

Alguien que controle de Scrapy puede decirme por donde es más fácil aprender? He estado mirando la documentación oficial pero no es lo que buscaba

2 respuestas
Deoxys

#141 Yo aprendí a base de ver un ejemplo, adaptarlo a mis necesidades y luego ir buscando según necesidad. Hasta ahora casi todas las arañas que he hecho han tenido una estructura común y me está funcionando bastante bien

NoixeN

#141 La documentación es mas que suficiente, trust me.

1
B

Os dejo este libro con ejercicios.

Learn Python the Hard Way
http://www.souravsengupta.com/int2pro2014/python/LPTHW.pdf

También lo tenéis en html
http://learnpythonthehardway.org/book/

1
HeXaN

Una charla un poco más avanzada, tocando el tema del multi-threading y sus problemas en Python.

Muy interesante.

1
Sorii34

que editor recomendáis para trabajar con python y sus librerias etc.

3 respuestas
Cryoned

#146

vim?
vim
vim para todo y para todos.

1
HeXaN

#146 IntelliJ IDEA.

4 1 respuesta
B

#148 te di manita sin acabar de leer pero te refieres a pycharm no? xd

1 1 respuesta
HeXaN

#149 No, me refiero a ese con el plugin de Python. Básicamente con los plugins se convierte en un IDE de JAVA, Python, PHP y demás. Así te ahorras bajarte el PyCharm, PhpStorm y demás.