Aplica como ponente o tallerista para el próximo evento PyCon Colombia 2019.
¡Va a ser sensacional!
Taller de programación gratuito para mujeres.
Invita a tus amigas, compañeras, primas y/o conocidas.
La palabra zen es la abreviación de zenna que es la pronunciación en japonés de la palabra china 禪那 chánnà, que a su vez deriva de la palabra sánscrita ध्यान dhiana, que significa ‘meditación’.
El zen busca la experiencia de la sabiduría por medio de la iluminación.
Son un listado de 20 principios de diseño para Python escritos por Tim Peters en junio de 1999
Foto de Patrick Vierthaler
Foto de Mark Hawkins
s = """Gur Mra bs Clguba, ol Gvz Crgref
Ornhgvshy vf orggre guna htyl.
Rkcyvpvg vf orggre guna vzcyvpvg.
Fvzcyr vf orggre guna pbzcyrk.
Pbzcyrk vf orggre guna pbzcyvpngrq.
Syng vf orggre guna arfgrq.
Fcnefr vf orggre guna qrafr.
Ernqnovyvgl pbhagf.
Fcrpvny pnfrf nera'g fcrpvny rabhtu gb oernx gur ehyrf.
Nygubhtu cenpgvpnyvgl orngf chevgl.
Reebef fubhyq arire cnff fvyragyl.
Hayrff rkcyvpvgyl fvyraprq.
Va gur snpr bs nzovthvgl, ershfr gur grzcgngvba gb thrff.
Gurer fubhyq or bar-- naq cersrenoyl bayl bar --boivbhf jnl gb qb vg.
Nygubhtu gung jnl znl abg or boivbhf ng svefg hayrff lbh'er Qhgpu.
Abj vf orggre guna arire.
Nygubhtu arire vf bsgra orggre guna *evtug* abj.
Vs gur vzcyrzragngvba vf uneq gb rkcynva, vg'f n onq vqrn.
Vs gur vzcyrzragngvba vf rnfl gb rkcynva, vg znl or n tbbq vqrn.
Anzrfcnprf ner bar ubaxvat terng vqrn -- yrg'f qb zber bs gubfr!"""
d = {}
for c in (65, 97):
for i in range(26):
d[chr(i+c)] = chr((i+13) % 26 + c)
print "".join([d.get(c, c) for c in s])
En vez de usar && o || como operadores logicos, considera usar and, or.
Aunque es subjetivo, el código parece más legible y hermoso de esta manera.
if (is_valid(a) && b == 0 || s == 'yes') {
# vs
if is_valid(a) and b == 0 or s == 'yes':
Esto puede referirse a "nombrar explícitamente módulos al invocarlos en funciones".
import os
print os.getcwd()
# en vez de
from os import *
print getcwd()
Según el desarrollador brasileño Vitor Freitas, "Steve Jobs declaró una vez que "simple puede ser más difícil que complejo". Y eso es verdad. Requiere mucho trabajo arduo para que su forma de pensar esté limpia, para llegar a una solución simple.
Digamos que mi novia imaginaria me pide que le haga una comida de tres platos para su cumpleaños (: complejo). A continuación, digamos que me pide que la lleve a un restaurante del que disfrutará (: complicado). Piensa en la diferencia principal entre Data Analytics y Data Science: en x tienes las preguntas pero no las respuestas, mientras que en y no tienes las preguntas ni las respuestas.
El anidamiento es muchas veces sinónimo de complejidad extra, de dependencias que a veces incomodan, de tener que mirar con cuidado. Lo plano es más directo, más claro. Y así debe ser tu decisión, directo al grano, sin vueltas.
if something:
if something_again:
if something_here:
# VS
if something:
do this
if somthing_again:
do this
No intentes pegar demasiado código en una línea
if i>0: return sqrt(i)
elif i==0: return 0
else: return 1j * sqrt(-i)
# vs
if i > 0:
return sqrt(i)
elif i == 0:
return 0
else:
return 1j * sqrt(-i)
Compare C:
#include <stdio.h>
int main(void)
{
printf("Hello, world!\n");
return(0);
}
print "Hello world!
VS Python:
Los idiomas y las bibliotecas deberían aspirar a la coherencia y deberían apoyar el caso general.
Con respecto a la Regla anterior, siempre puede haber una excepción a la regla.
Nunca permita que los errores, que pueden ocurrir, confundan al lector. Esto se puede resolver fácilmente imprimiendo una cadena cuando ocurre un error.
try:
import this
except ImportError:
print 'this is not available'
try:
v = d[k]
except KeyError:
v = d[k] = default
#Considere
if not a and b: do something
'''
¿Qué une más estrechamente 'not' o 'and'? La sintaxis no es ambigua, pero mi memoria no.
¿Podría ser? (no):
'''
if not (a and b): do something
# y que tal:
if b and not a: do something
#Tal vez un poco mas feo pero sirve:
if (not a) and b: do something
Esto es subjetivo porque alguien puede argumentar que debe esperar que el lector de su código conozca Python y las prioridades para 'not' y 'and'
Piense por qué sería que Python se describe como un lenguaje de programación fácil de aprender.
¿No sería más difícil si tuvieras que aprender múltiples formas de hacer cada cosa?
El ejemplo mas claro es al iterar sobre una lista. En Python solo debes aprender:
for element in sequence:
Esta es una referencia al creador de Python, Guido van Rossum.
No dedique demasiado tiempo a planificar y preoptimizar; obtenga algo que haga el trabajo y mejorelo con el tiempo.
Es a menudo mejor planear que empezar en un camino del cual no hay marcha atrás
Si la implementación es complicada, definitivamente no es simple, lo que significa que no está cerca de un borrador final, lo que significa que no es bueno publicarlo como tal.
Algunas ideas son simplemente malas, independientemente de si son fáciles de implementar o no.
Conjuntos de símbolos, y varios objetos a los que se hace referencia por nombre. Supongo que en lenguaje general, una palabra se define con otras palabras. Una vez aprendido, solo necesitamos una palabra, ¿o namespace? - para dar sentido a algo, simplificando la vida en el proceso.
Nombre son los identificadores de un objeto dado. Como todo es un objeto en Python, nombre es una forma de acceder a ese objeto.
a = 2
# 2 es el objeto guardado en memoria
# a es el nombre asociado a el
Para ponerlo simple, un namespace es una colección de nombres.
Diferentes namespaces pueden co-existir en un determinado momento y son aislados.
Aunque existan varios namespaces no podemos acceder a todos desde cualquier parte del programa. Ahi es donde el concepto de scope entra a jugar.
Scope es una porción del programa desde donde un namespace puede ser accedido directamente sin prefijo.
def outer_function():
b = 20
def inner_func():
c = 30
a = 10
# La varibale a esta en namespace global
# b esta en el namespace local de outer_function()
# c esta en el namespace local anidado de
inner_function()
'''
Cuando estamos en inner_function(), c es local
para nosotros, b no es local y a es global
'''