<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
		>
<channel>
	<title>Comentarios en: Serpientes y rubíes</title>
	<atom:link href="http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/?utm_source=rss&#038;utm_medium=rss&#038;utm_campaign=serpientes-y-rubies</link>
	<description>el blog de Juanjo Conti - abstracto, lúdico y digital</description>
	<lastBuildDate>Tue, 07 Feb 2012 01:36:00 +0000</lastBuildDate>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
	<item>
		<title>Por: humitos</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-83725</link>
		<dc:creator>humitos</dc:creator>
		<pubDate>Wed, 23 Dec 2009 00:47:17 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-83725</guid>
		<description>Facundo:&lt;br&gt;&lt;br&gt;Eso se puede hacer por que la regex que utilizó Gastón es sencilla, pero si es algo un poquito más complicado él puede seguir haciendo =~ y con Python tenemos que importar un módulo (re), ejecutar la expresión sobre la cadena y ver si matchea para incluirla en la lista o no. Con una regex más complicada no tenemos una agradable sintaxis visualmente.&lt;br&gt;&lt;br&gt;Saludos.</description>
		<content:encoded><![CDATA[<p>Facundo:</p>
<p>Eso se puede hacer por que la regex que utilizó Gastón es sencilla, pero si es algo un poquito más complicado él puede seguir haciendo =~ y con Python tenemos que importar un módulo (re), ejecutar la expresión sobre la cadena y ver si matchea para incluirla en la lista o no. Con una regex más complicada no tenemos una agradable sintaxis visualmente.</p>
<p>Saludos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Juanjo</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-76003</link>
		<dc:creator>Juanjo</dc:creator>
		<pubDate>Mon, 09 Mar 2009 18:31:35 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-76003</guid>
		<description>Ja! un amigo Oliver...

Dejo un link con una mejor discusión &lt;a href=&quot;http://c2.com/cgi/wiki?PythonVsRuby&quot; rel=&quot;nofollow&quot;&gt;http://c2.com/cgi/wiki?PythonVsRuby&lt;/a&gt;.</description>
		<content:encoded><![CDATA[<p>Ja! un amigo Oliver&#8230;</p>
<p>Dejo un link con una mejor discusión <a href="http://c2.com/cgi/wiki?PythonVsRuby" rel="nofollow">http://c2.com/cgi/wiki?PythonVsRuby</a>.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Oliver</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-75881</link>
		<dc:creator>Oliver</dc:creator>
		<pubDate>Sun, 08 Mar 2009 00:37:36 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-75881</guid>
		<description>Una pregunta Juanjo, en ruby puedo hacer lo siguiente:

puts `dir`

Es decir encerrando un comando externo en un par de acentos agudos puedo ejecutar un comando externo.

En python, cómo puedo hacer esto igual de simple sin hacer todo esto:

import os
print os.system(&#039;dir&#039;)

Saludos.</description>
		<content:encoded><![CDATA[<p>Una pregunta Juanjo, en ruby puedo hacer lo siguiente:</p>
<p>puts `dir`</p>
<p>Es decir encerrando un comando externo en un par de acentos agudos puedo ejecutar un comando externo.</p>
<p>En python, cómo puedo hacer esto igual de simple sin hacer todo esto:</p>
<p>import os<br />
print os.system(&#8216;dir&#8217;)</p>
<p>Saludos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Gastón</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11540</link>
		<dc:creator>Gastón</dc:creator>
		<pubDate>Fri, 25 Apr 2008 23:03:06 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11540</guid>
		<description>Hola Facundo, las { } no son para ejecutar un método, son para delimitar un bloque de código, en ruby los métodos pueden tomar bloques de código multilínea cómo argumento,
otra forma sería: 

nombres.delete_if do &#124;n&#124;
  n.start_with? &quot;Pe&quot;
end


Si no te gustan las llaves podés usar do y end como delimitadores, Fijate este ejemplo:

nombres.delete_if do &#124;n&#124;
  puts &quot;El nombre #{n} empieza con Pe&quot; if n.start_with? &quot;Pe&quot; 
  puts &quot;#{n} no empieza con Pe&quot; unless n.start_with? &quot;Pe&quot; 
end


Otra forma con for sería:

for n in nombres
  puts &quot;El nombre #{n} empieza con Pe&quot; if n.start_with? &quot;Pe&quot; 
  puts &quot;#{n} no empieza con Pe&quot; unless n.start_with? &quot;Pe&quot; 
end


con respecto a tu pregunta, delete_if retorna un nuevo array, no modifica a nombres
Entonces el tema es así delete_if es un método que toma como argumento un bloque de código si este bloque evalúa a true entoces n se elimina.

César:
  Es verdad que las regex complicadas son difíciles de leer pero eso no quiere decir que no se deban usar, hay veces que son muy útiles, por ejemplo para las validaciones de entrada de datos y por lo que decís de la depuración, para eso están los tests.

Saludos</description>
		<content:encoded><![CDATA[<p>Hola Facundo, las { } no son para ejecutar un método, son para delimitar un bloque de código, en ruby los métodos pueden tomar bloques de código multilínea cómo argumento,<br />
otra forma sería: </p>
<p>nombres.delete_if do |n|<br />
  n.start_with? &#8220;Pe&#8221;<br />
end</p>
<p>Si no te gustan las llaves podés usar do y end como delimitadores, Fijate este ejemplo:</p>
<p>nombres.delete_if do |n|<br />
  puts &#8220;El nombre #{n} empieza con Pe&#8221; if n.start_with? &#8220;Pe&#8221;<br />
  puts &#8220;#{n} no empieza con Pe&#8221; unless n.start_with? &#8220;Pe&#8221;<br />
end</p>
<p>Otra forma con for sería:</p>
<p>for n in nombres<br />
  puts &#8220;El nombre #{n} empieza con Pe&#8221; if n.start_with? &#8220;Pe&#8221;<br />
  puts &#8220;#{n} no empieza con Pe&#8221; unless n.start_with? &#8220;Pe&#8221;<br />
end</p>
<p>con respecto a tu pregunta, delete_if retorna un nuevo array, no modifica a nombres<br />
Entonces el tema es así delete_if es un método que toma como argumento un bloque de código si este bloque evalúa a true entoces n se elimina.</p>
<p>César:<br />
  Es verdad que las regex complicadas son difíciles de leer pero eso no quiere decir que no se deban usar, hay veces que son muy útiles, por ejemplo para las validaciones de entrada de datos y por lo que decís de la depuración, para eso están los tests.</p>
<p>Saludos</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Facundo Batista</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11515</link>
		<dc:creator>Facundo Batista</dc:creator>
		<pubDate>Fri, 25 Apr 2008 15:00:48 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11515</guid>
		<description>Gastón:

1. nombres.delete_if{&#124;n&#124; n =~ /^Pe/}
2. [x for x in nombres if not x.startswith(&quot;Pe&quot;)]

Te cuento por qué no me gusta la versión 1, teniendo en cuenta que *no sé Ruby*:

- ¿Eso me devuelve algo nuevo o me está modificando &quot;nombres&quot;?
- Asumo, que el &quot;&#124;n&#124;&quot; es para nombrar cada elemento de &quot;nombres&quot;, y que el &quot;=~&quot; hace una especie de &quot;comparación soft&quot;, ¿pero para qué son las barras alrededor de &quot;^Pe?
- Si &quot;nombres&quot; es un objeto, y &quot;delete_if&quot; es un método del objeto, ¿eso significa que a un método lo ejecutás poniendo {}?

Muy posiblemente, si no sabés Python, te perderás algunos detalles del punto 2, pero creo que en general es más fácil de leer y de descubrir lo que está haciendo (si no sos japonés, al menos)

Igual, para cerrar, creo que esto que decimos ambos es un 99% cuestión de gustos...


Humitos:

Las expresiones regulares están sobrevaloradas. En el 99% de mis códigos, jamás necesito una (principalmente porque Python tiene otras formas de manejar strings...). Por otro lado, si querés claridad, en Python podés usar el modo verbose, con lo cual explicás la regex adentro de la misma, mirá:  http://docs.python.org/dev/library/re.html#re.VERBOSE.

Slds.</description>
		<content:encoded><![CDATA[<p>Gastón:</p>
<p>1. nombres.delete_if{|n| n =~ /^Pe/}<br />
2. [x for x in nombres if not x.startswith("Pe")]</p>
<p>Te cuento por qué no me gusta la versión 1, teniendo en cuenta que *no sé Ruby*:</p>
<p>- ¿Eso me devuelve algo nuevo o me está modificando &#8220;nombres&#8221;?<br />
- Asumo, que el &#8220;|n|&#8221; es para nombrar cada elemento de &#8220;nombres&#8221;, y que el &#8220;=~&#8221; hace una especie de &#8220;comparación soft&#8221;, ¿pero para qué son las barras alrededor de &#8220;^Pe?<br />
- Si &#8220;nombres&#8221; es un objeto, y &#8220;delete_if&#8221; es un método del objeto, ¿eso significa que a un método lo ejecutás poniendo {}?</p>
<p>Muy posiblemente, si no sabés Python, te perderás algunos detalles del punto 2, pero creo que en general es más fácil de leer y de descubrir lo que está haciendo (si no sos japonés, al menos)</p>
<p>Igual, para cerrar, creo que esto que decimos ambos es un 99% cuestión de gustos&#8230;</p>
<p>Humitos:</p>
<p>Las expresiones regulares están sobrevaloradas. En el 99% de mis códigos, jamás necesito una (principalmente porque Python tiene otras formas de manejar strings&#8230;). Por otro lado, si querés claridad, en Python podés usar el modo verbose, con lo cual explicás la regex adentro de la misma, mirá:  <a href="http://docs.python.org/dev/library/re.html#re.VERBOSE" rel="nofollow">http://docs.python.org/dev/library/re.html#re.VERBOSE</a>.</p>
<p>Slds.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Cesar</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11501</link>
		<dc:creator>Cesar</dc:creator>
		<pubDate>Fri, 25 Apr 2008 12:20:49 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11501</guid>
		<description>El Zen de Python habla sobre que la &quot;legibilidad del código cuenta&quot;. El uso - y abuso - de expresiones regulares no ayuda para nada a la legibilidad ni a la depuración.
Si para validar un número telefónico te pongo /^((\(\d{3}\))?*\d{3}(-&#124;)\d{4},?*)+$/ , cuando revises el código dentro de un año pegate un tiro si no has comentado en varias líneas lo que todo eso significa :-)</description>
		<content:encoded><![CDATA[<p>El Zen de Python habla sobre que la &quot;legibilidad del código cuenta&quot;. El uso &#8211; y abuso &#8211; de expresiones regulares no ayuda para nada a la legibilidad ni a la depuración.<br />
Si para validar un número telefónico te pongo /^((\(\d{3}\))?*\d{3}(-|)\d{4},?*)+$/ , cuando revises el código dentro de un año pegate un tiro si no has comentado en varias líneas lo que todo eso significa <img src='http://www.juanjoconti.com.ar/wp-includes/images/smilies/icon_smile.gif' alt=':-)' class='wp-smiley' /> </p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: humitos</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11494</link>
		<dc:creator>humitos</dc:creator>
		<pubDate>Fri, 25 Apr 2008 01:00:53 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11494</guid>
		<description>Facundo:

Eso se puede hacer por que la regex que utilizó Gastón es sencilla, pero si es algo un poquito más complicado él puede seguir haciendo =~ y con Python tenemos que importar un módulo (re), ejecutar la expresión sobre la cadena y ver si matchea para incluirla en la lista o no. Con una regex más complicada no tenemos una agradable sintaxis visualmente.

Saludos.</description>
		<content:encoded><![CDATA[<p>Facundo:</p>
<p>Eso se puede hacer por que la regex que utilizó Gastón es sencilla, pero si es algo un poquito más complicado él puede seguir haciendo =~ y con Python tenemos que importar un módulo (re), ejecutar la expresión sobre la cadena y ver si matchea para incluirla en la lista o no. Con una regex más complicada no tenemos una agradable sintaxis visualmente.</p>
<p>Saludos.</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Daniel F Moisset</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11369</link>
		<dc:creator>Daniel F Moisset</dc:creator>
		<pubDate>Tue, 22 Apr 2008 14:05:31 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11369</guid>
		<description>Yo la 8, por claridad, lo haría como:

import operator
reduce (operator.mul, numeros)</description>
		<content:encoded><![CDATA[<p>Yo la 8, por claridad, lo haría como:</p>
<p>import operator<br />
reduce (operator.mul, numeros)</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Gastón</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11343</link>
		<dc:creator>Gastón</dc:creator>
		<pubDate>Mon, 21 Apr 2008 21:01:37 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11343</guid>
		<description>Facundo: 
   Otras variantes serían: 
     &lt;code&gt; [&quot;Pedro&quot;, &quot;Pepe&quot;, &quot;Ariel&quot;, &quot;TerePe&quot;].select{&#124;n&#124; not n.start_with? &quot;Pe&quot;}
                 [&quot;Pedro&quot;, &quot;Pepe&quot;, &quot;Ariel&quot;, &quot;TerePe&quot;].delete_if{&#124;n&#124; n.start_with? &quot;Pe&quot;}
                 [&quot;Pedro&quot;, &quot;Pepe&quot;, &quot;Ariel&quot;, &quot;TerePe&quot;].find_all{&#124;n&#124; not n.start_with? &quot;Pe&quot;}
                 [&quot;Pedro&quot;, &quot;Pepe&quot;, &quot;Ariel&quot;, &quot;TerePe&quot;].collect{&#124;n&#124; n if not n.start_with? &quot;Pe&quot;}.compact
      &lt;/code&gt;
a mí delete_if me gusta más por que me parece que es más expresivo, vos por qué decís que te gusta más el &quot;n for n in nombres &quot; ?

Saludos</description>
		<content:encoded><![CDATA[<p>Facundo:<br />
   Otras variantes serían:<br />
     <code> ["Pedro", "Pepe", "Ariel", "TerePe"].select{|n| not n.start_with? "Pe"}<br />
                 ["Pedro", "Pepe", "Ariel", "TerePe"].delete_if{|n| n.start_with? "Pe"}<br />
                 ["Pedro", "Pepe", "Ariel", "TerePe"].find_all{|n| not n.start_with? "Pe"}<br />
                 ["Pedro", "Pepe", "Ariel", "TerePe"].collect{|n| n if not n.start_with? "Pe"}.compact<br />
      </code><br />
a mí delete_if me gusta más por que me parece que es más expresivo, vos por qué decís que te gusta más el &#8220;n for n in nombres &#8221; ?</p>
<p>Saludos</p>
]]></content:encoded>
	</item>
	<item>
		<title>Por: Facundo Batista</title>
		<link>http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/comment-page-1/#comment-11332</link>
		<dc:creator>Facundo Batista</dc:creator>
		<pubDate>Mon, 21 Apr 2008 13:04:33 +0000</pubDate>
		<guid isPermaLink="false">http://www.juanjoconti.com.ar/2008/04/19/serpientes-y-rubies/#comment-11332</guid>
		<description>Gastón:

No sé si elegante, pero si &quot;[].delete_if{&#124;n&#124; n =~ /^Pe/}&quot; es la mejor forma de escribir en Ruby, confirmo que *me* gusta mucho más la sintaxis de Python que eso...

Aureliano:

No entiendo porqué una función anónima multilinea es más poderosa que una función nominada multilinea.

Slds.</description>
		<content:encoded><![CDATA[<p>Gastón:</p>
<p>No sé si elegante, pero si &#8220;[].delete_if{|n| n =~ /^Pe/}&#8221; es la mejor forma de escribir en Ruby, confirmo que *me* gusta mucho más la sintaxis de Python que eso&#8230;</p>
<p>Aureliano:</p>
<p>No entiendo porqué una función anónima multilinea es más poderosa que una función nominada multilinea.</p>
<p>Slds.</p>
]]></content:encoded>
	</item>
</channel>
</rss>

