{"id":19,"date":"2020-05-25T16:51:12","date_gmt":"2020-05-25T16:51:12","guid":{"rendered":"https:\/\/www.pythonparatodo.com\/?p=19"},"modified":"2020-06-07T11:25:14","modified_gmt":"2020-06-07T09:25:14","slug":"zen-de-python","status":"publish","type":"post","link":"https:\/\/www.pythonparatodo.com\/?p=19","title":{"rendered":"Zen de Python"},"content":{"rendered":"\n<p>Tim Peters, activo colaborador de Python, escribi\u00f3 hace a\u00f1os, unos principios que bien podr\u00edan ser la filosof\u00eda o Zen de Python. Estos principios se incorporaron dentro del propio Python y se pueden ver escribiendo <strong><em>import this<\/em><\/strong> en el prompt interactivo de Python.<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> import this\nThe Zen of Python, by Tim Peters\n\nBeautiful is better than ugly.\nExplicit is better than implicit.\nSimple is better than complex.\nComplex is better than complicated.\nFlat is better than nested.\nSparse is better than dense.\nReadability counts.\nSpecial cases aren't special enough to break the rules.\nAlthough practicality beats purity.\nErrors should never pass silently.\nUnless explicitly silenced.\nIn the face of ambiguity, refuse the temptation to guess.\nThere should be one-- and preferably only one --obvious way to do it.\nAlthough that way may not be obvious at first unless you're Dutch.\nNow is better than never.\nAlthough never is often better than *right* now.\nIf the implementation is hard to explain, it's a bad idea.\nIf the implementation is easy to explain, it may be a good idea.\nNamespaces are one honking great idea -- let's do more of those!<\/code><\/pre>\n\n\n\n<p>Estos principios que se pueden aplicar a la programaci\u00f3n en Python son:<\/p>\n\n\n\n<p><strong>Bello es mejor que feo<\/strong><\/p>\n\n\n\n<p>Un c\u00f3digo bien escrito, legible, coherente, siempre es mejor que uno mal escrito, ilegible e incoherente, por tanto, los programadores Python desarrollan un c\u00f3digo bien dise\u00f1ado, eficiente y elegante. En la PSF se pueden encontrar la PEP 8, gu\u00eda de estilos para programar en Python <a href=\"https:\/\/www.python.org\/dev\/peps\/pep-0008\/\">https:\/\/www.python.org\/dev\/peps\/pep-0008\/<\/a> con recomendaciones para la indentaci\u00f3n, el uso de tabulaciones, espacios, etc.<\/p>\n\n\n\n<p><strong>Expl\u00edcito es mejor que impl\u00edcito<\/strong><\/p>\n\n\n\n<p>Si se puede escribir el c\u00f3digo entendible, haciendo expl\u00edcito lo que se quiere programar, siempre es mejor que escribir c\u00f3digo y luego al revisarlo tener que imaginarse que significa cada pieza de c\u00f3digo. De estas dos sentencias, \u00bfcu\u00e1l resulta mas comprensible?<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">vcs = [\u2018a\u2019,\u2019e\u2019,\u2019i\u2019,\u2019o\u2019,\u2019u\u2019]\nvocales = [\u2018a\u2019,\u2019e\u2019,\u2019i\u2019,\u2019o\u2019,\u2019u\u2019]<\/code><\/pre>\n\n\n\n<p><strong>Simple es mejor que complejo<\/strong><\/p>\n\n\n\n<p>Cuanto m\u00e1s simple sea el c\u00f3digo m\u00e1s f\u00e1cil ser\u00e1 trabajar con el o realizar futuras modificaciones. Adem\u00e1s del c\u00f3digo se tiene en cuenta el resultado, cuanto m\u00e1s simple sea una interfaz m\u00e1s f\u00e1cil lo tendr\u00e1 el usuario final para trabajar con ella. Comprueba est\u00e9 c\u00f3digo y mira cu\u00e1l te resulta m\u00e1s simple.<\/p>\n\n\n\n<p>Ejemplo 1<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">a = [1,2,3,4,5,6,7,8,9]\nfor x in range(len(a)):\n\tprint(a[x])<\/code><\/pre>\n\n\n\n<p>Ejemplo 2<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">numeros = [1,2,3,4,5,6,7,8,9]\nfor numero in numeros:\n\tprint(numero)<\/code><\/pre>\n\n\n\n<p><strong>Complejo es mejor que complicado<\/strong><\/p>\n\n\n\n<p>Si hay varias formas de solucionar algo, se espera usas la que resulte mas simple.<\/p>\n\n\n\n<p><strong>Plano es mejor que anidado.<\/strong><\/p>\n\n\n\n<p>A veces es necesario usar el anidamiento o estructuras complejas, Python promueve que se haga lo mas plano posible en aras de la comprensi\u00f3n para futuras modificaciones u optimizaciones del c\u00f3digo.<\/p>\n\n\n\n<p><strong>Disperso es mejor que denso<\/strong><\/p>\n\n\n\n<p>Es mejor dejar los espacios oportunos y no querer que todo el c\u00f3digo entre en una linea. El primer c\u00f3digo es mas disperso que el segundo<\/p>\n\n\n\n<pre class=\"wp-block-code\"><code lang=\"python\" class=\"language-python\">>>> numeros = [ 1 , 2 , 3 ]; print( numeros )\n[1, 2, 3]\n>>> numeros=[1,2,3];print(numeros)\n[1, 2, 3]<\/code><\/pre>\n\n\n\n<p><strong>La legibilidad cuenta<\/strong><\/p>\n\n\n\n<p>Por lo que, aunque el c\u00f3digo sea complejo se intenta que sea legible y f\u00e1cil de entender, escribiendo comentarios aclaratorios.<\/p>\n\n\n\n<p><strong>Los casos especiales no son suficientemente especiales para romper las reglas<\/strong><\/p>\n\n\n\n<p>Siempre se deber\u00eda hacer que el c\u00f3digo siga las normas y usar las soluciones generales para solventar los problemas.<\/p>\n\n\n\n<p><strong>Aunque lo pr\u00e1ctico supera a la pureza<\/strong><\/p>\n\n\n\n<p>Siempre puede existir alguna excepci\u00f3n a la regla.<\/p>\n\n\n\n<p><strong>Los errores nunca deber\u00edan pasar silenciosamente<\/strong><\/p>\n\n\n\n<p>Se deber\u00edan tratar los errores con Try except para mostrar un mensaje en el caso de que se produzcan, haciendo que la persona que usa el software sepa lo que est\u00e1 ocurriendo.<\/p>\n\n\n\n<p><strong>A menos que sean expl\u00edcitamente silenciados<\/strong><\/p>\n\n\n\n<p>Es decir, que el error no sea relevante y simplemente se quiera continuar con la ejecuci\u00f3n del c\u00f3digo.<\/p>\n\n\n\n<p><strong>Ante la ambig\u00fcedad, rechaza la tentaci\u00f3n de adivinar<\/strong><\/p>\n\n\n\n<p>Lo que vuelve a indicar que es mejor que el c\u00f3digo sea claro, es decir, es mejor que se escriba a+(b*c) a que se escriba a+b*c. Aunque el resultado sea el mismo, resulta m\u00e1s clara la primera opci\u00f3n.<\/p>\n\n\n\n<p><strong>Deber\u00eda haber una, y preferiblemente solo una, manera obvia de hacerlo<\/strong><\/p>\n\n\n\n<p>Teniendo como premisa que simple es mejor que complejo, aunque varios programadores busquen la soluci\u00f3n a un mismo problema de forma diferente siempre existir\u00e1 la forma mas simple y obvia.<\/p>\n\n\n\n<p><strong>Aunque esa manera pueda no ser obvia al principio a menos que seas holand\u00e9s<\/strong><\/p>\n\n\n\n<p>Es una referencia al programador, quien mejor que el deber\u00eda saber cu\u00e1l es la forma mas obvia de hacer las cosas con Python.<\/p>\n\n\n\n<p><strong>Ahora es mejor que nunca<\/strong><\/p>\n\n\n\n<p>A veces es mejor no dedicar tanto tiempo a planificar, simplemente se puede realizar algo que funcione y optimizarlo m\u00e1s tarde.<\/p>\n\n\n\n<p><strong>Aunque nunca es a veces mejor que ahora mismo<\/strong><\/p>\n\n\n\n<p>Siempre es bueno tener en cuenta la posibilidad de la mejora del c\u00f3digo antes de comenzar ya que se puede acabar en un callej\u00f3n sin salida. <\/p>\n\n\n\n<p><strong>Si la implementaci\u00f3n es dif\u00edcil de explicar, es una mala idea<\/strong><\/p>\n\n\n\n<p>Si la implementaci\u00f3n es complicada quiz\u00e1s no sea buena idea publicarlo as\u00ed.<\/p>\n\n\n\n<p><strong>Si la implementaci\u00f3n es f\u00e1cil de explicar, puede ser una buena idea<\/strong><\/p>\n\n\n\n<p>Aunque la implementaci\u00f3n sea f\u00e1cil hay que usar el sentido com\u00fan para saber si la idea es buena.<\/p>\n\n\n\n<p><strong>Los namespaces son una idea genial, \u00a1Tengamos m\u00e1s!<\/strong><\/p>\n\n\n\n<p>Los namespaces son un sistema para asegurar que todos los nombres en un script Python sean \u00fanicos y puedan ser usados sin conflicto.<\/p>\n","protected":false},"excerpt":{"rendered":"<p>Tim Peters, activo colaborador de Python, escribi\u00f3 hace a\u00f1os, unos principios que bien podr\u00edan ser la filosof\u00eda o Zen de &hellip; <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[4],"tags":[2,6,7],"class_list":["post-19","post","type-post","status-publish","format-standard","hentry","category-python","tag-python","tag-python3","tag-zen"],"_links":{"self":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/19","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=19"}],"version-history":[{"count":3,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/19\/revisions"}],"predecessor-version":[{"id":115,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=\/wp\/v2\/posts\/19\/revisions\/115"}],"wp:attachment":[{"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=19"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=19"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/www.pythonparatodo.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=19"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}