<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	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/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>Mundo Geek &#187; tipos</title>
	<atom:link href="http://mundogeek.net/etiqueta/tipos/feed/" rel="self" type="application/rss+xml" />
	<link>http://mundogeek.net</link>
	<description>Mundo geek, bitácora sobre todo lo geek: software, gadgets, tecnología, internet, ...</description>
	<lastBuildDate>Wed, 08 Feb 2012 16:09:25 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=3.3.1</generator>
		<item>
		<title>Python: Tipos básicos II (Colecciones)</title>
		<link>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/</link>
		<comments>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/#comments</comments>
		<pubDate>Mon, 21 Jan 2008 10:14:34 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[diccionarios]]></category>
		<category><![CDATA[listas]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tipos]]></category>
		<category><![CDATA[tuplas]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/</guid>
		<description><![CDATA[En Python: Tipos básicos vimos los números, las cadenas de texto y los booleanos. En esta lección veremos algunos tipos de colecciones de datos: listas, tuplas y diccionarios. Listas La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conoce por arrays, o vectores. Las listas pueden contener [...]]]></description>
			<content:encoded><![CDATA[<p>En <a href="http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/" title="Python: Tipos básicos">Python: Tipos básicos</a> vimos los números, las cadenas de texto y los booleanos. En esta lección veremos algunos tipos de colecciones de datos: listas, tuplas y diccionarios.</p>
<h2>Listas</h2>
<p>La lista es un tipo de colección ordenada. Sería equivalente a lo que en otros lenguajes se conoce por arrays, o vectores.</p>
<p>Las listas pueden contener cualquier tipo de dato: números, cadenas, booleanos, &#8230; y también listas.</p>
<p>Crear una lista es tan sencillo como indicar entre corchetes, y separados por comas, los valores que queremos incluir en la lista:</p>
<pre class="code">l = [22, True, <span class="Normal">&quot;</span><span class="String">una lista</span><span class="Normal">&quot;</span>, [1, 2]]</pre>
<p>Podemos acceder a cada uno de los elementos de la lista escribiendo el nombre de la lista e indicando el índice del elemento entre corchetes. Ten en cuenta sin embargo que el índice del primer elemento de la lista es 0, y no 1:</p>
<pre class="code">mi_var = l[0] <span class="pythonComment"># mi_var vale 22</span></pre>
<p><span id="more-1341"></span><br />
Si queremos acceder a un elemento de una lista incluida dentro de otra lista tendremos que utilizar dos veces este operador, primero para indicar a qué posición de la lista exterior queremos acceder, y el segundo para seleccionar el elemento de la lista interior:</p>
<pre class="code">mi_var = l[3][0] <span class="pythonComment"># mi_var vale 1</span></pre>
<p>También podemos utilizar este operador para modificar un elemento de la lista si lo colocamos en la parte izquierda de una asignación:</p>
<pre class="code">l[0] = 99 <span class="pythonComment"># l vale [99, True, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>El uso de los corchetes para acceder y modificar los elementos de una lista es común en muchos lenguajes, pero Python nos depara varias sorpresas muy agradables.</p>
<p>Una curiosidad sobre el operador [] de Python es que podemos utilizar también números negativos. Si se utiliza un número negativo como índice, esto se traduce en que el índice empieza a contar desde el final, hacia la izquierda; es decir, con [-1] accederíamos al último elemento de la lista, con [-2] al penúltimo, con [-3], al antepenúltimo, y así sucesivamente.</p>
<p>Otra cosa inusual es lo que en Python se conoce como slicing o particionado, y que consiste en ampliar este mecanismo para permitir seleccionar porciones de la lista. Si en lugar de un número escribimos dos números <em>inicio</em> y <em>fin</em> separados por dos puntos (inicio:fin) Python interpretará que queremos una lista que vaya desde la posición inicio a la posición fin, sin incluir este último. Si escribimos tres números (inicio:fin:salto) en lugar de dos, el tercero se utiliza para determinar cada cuantas posiciones añadir un elemento a la lista.</p>
<pre class="code">mi_var = l[0:2]   <span class="pythonComment"># mi_var vale [99, True]</span>
mi_var = l[0:4:2] <span class="pythonComment"># mi_var vale [99, &quot;una lista&quot;]</span></pre>
<p>Los números negativos también se pueden utilizar, con el mismo comportamiento que se comentó anteriormente.</p>
<p>Hay que mencionar así mismo que no es necesario indicar el principio y el final del slicing, sino que, si estos se omiten, se usarán por defecto las posiciones de inicio y final de la lista respectivamente:</p>
<pre class="code">mi_var = l[1:]  <span class="pythonComment"># mi_var vale [True, &quot;una lista&quot;, [1, 2]]</span>
mi_var = l[:2]  <span class="pythonComment"># mi_var vale [99, True]</span>
mi_var = l[:]   <span class="pythonComment"># mi_var vale [99, True, &quot;una lista&quot;, [1, 2]]</span>
mi_var = l[::2] <span class="pythonComment"># mi_var vale [99, &quot;una lista&quot;]</span></pre>
<p>También podemos utilizar este mecanismo para modificar la lista:</p>
<pre class="code">l[0:2] = [0, 1] <span class="pythonComment"># l vale [0, 1, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>pudiendo incluso modificar el tamaño de la lista si la lista de la parte derecha de la asignación tiene un tamaño menor o mayor que el de la selección de la parte izquierda de la asignación:</p>
<pre class="code">l[0:2] = [False] <span class="pythonComment"># l vale [False, &quot;una lista&quot;, [1, 2]]</span></pre>
<p>En todo caso las listas ofrecen mecanismos más cómodos para ser modificadas a través de las funciones de la clase correspondiente, aunque no veremos estos mecanismos hasta más adelante, después de explicar lo que son las clases, los objetos y las funciones.</p>
<h2>Tuplas</h2>
<p>Todo lo que hemos explicado sobre las listas se aplica también a las tuplas, a excepción de la forma de definirla, en la que se utiliza paréntesis en lugar de corchetes.</p>
<pre class="code">t = (1, 2, True, <span class="Normal">&quot;</span><span class="String">python</span><span class="Normal">&quot;</span>)</pre>
<p>En realidad el constructor de la tupla es la coma, no el paréntesis, pero el intérprete muestra los paréntesis, y nosotros deberíamos utilizarlos, por claridad.</p>
<p class="code">&gt;&gt;&gt; t = 1, 2, 3<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;tuple&#8221;</p>
<p>Además hay que tener en cuenta que es necesario añadir una coma para tuplas de un solo elemento, para diferenciarlo de un elemento entre paréntesis.</p>
<p class="code">&gt;&gt;&gt; t = (1)<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;int&#8221;<br />
&gt;&gt;&gt; t = (1,)<br />
&gt;&gt;&gt; type(t)<br />
type &#8220;tuple&#8221;</p>
<p>Para referirnos a elementos de una tupla, como en una lista, se usa el operador []:</p>
<pre class="code">mi_var = t[0] <span class="pythonComment"># mi_var es 1</span>
mi_var = t[0:2] <span class="pythonComment"># mi_var es (1, 2)</span></pre>
<p>Podemos utilizar el operador [] debido a que las tuplas, al igual que las listas, forman parte de un tipo de objetos llamados secuencias. Permitirme un pequeño inciso para indicaros que las cadenas de texto también son secuencias, por lo que no os extrañará que podamos hacer cosas como estas:</p>
<pre class="code">c = <span class="Normal">&quot;</span><span class="String">hola mundo</span><span class="Normal">&quot;</span>
c[0]   <span class="pythonComment"># h</span>
c[5:]  <span class="pythonComment"># mundo</span>
c[::3] <span class="pythonComment"># hauo</span></pre>
<p>Volviendo al tema de las tuplas, su diferencia con las listas estriba en que las tuplas no poseen estos mecanismos de modificación tan útiles de los que hablábamos al final de la anterior sección. También son inmutables, es decir, sus valores no se pueden modificar una vez creada; y de tamaño fijo. A cambio las tuplas son más &#8220;ligeras&#8221; que las listas, por lo que si el uso que le vas a dar a tu colección es muy básico, puedes utilizar tuplas en lugar de listas y ahorrar memoria.</p>
<h2>Diccionarios</h2>
<p>Los diccionarios, también llamados matrices asociativas, deben su nombre a que son colecciones que relacionan una clave y un valor. Por ejemplo, veamos un diccionario de películas y directores:</p>
<pre class="code">d = {<span class="Normal">&quot;</span><span class="String">Love Actually </span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Richard Curtis</span><span class="Normal">&quot;</span>,
     <span class="Normal">&quot;</span><span class="String">Kill Bill</span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Tarantino</span><span class="Normal">&quot;</span>,
     <span class="Normal">&quot;</span><span class="String">Amélie</span><span class="Normal">&quot;</span>: <span class="Normal">&quot;</span><span class="String">Jean-Pierre Jeunet</span><span class="Normal">&quot;</span>}</pre>
<p>El primer valor se trata de la clave y el segundo del valor asociado a la clave. Como clave podemos utilizar cualquier valor inmutable: podríamos usar números, cadenas, booleanos, tuplas, &#8230; pero no listas o diccionarios, dado que son mutables. Esto es así porque los diccionarios se implementan como tablas hash, y a la hora de introducir un nuevo par clave-valor en el diccionario se calcula el hash de la clave para después poder encontrar la entrada correspondiente rápidamente. Si se modificara el objeto clave después de haber sido introducido en el diccionario, evidentemente, su hash también cambiaría y no podría ser encontrado.</p>
<p>La diferencia principal entre los diccionarios y las listas o las tuplas es que a los valores almacenados en un diccionario se les accede no por su índice, porque de hecho no tienen orden, sino por su clave, utilizando de nuevo el operador [].</p>
<pre class="code">d[<span class="Normal">&quot;</span><span class="String">Love Actually </span><span class="Normal">&quot;</span>] <span class="pythonComment"># devuelve &quot;Richard Curtis&quot;</span></pre>
<p>Al igual que en listas y tuplas también se puede utilizar este operador para reasignar valores.</p>
<pre class="code">d[<span class="Normal">&quot;</span><span class="String">Kill Bill</span><span class="Normal">&quot;</span>] = <span class="Normal">&quot;</span><span class="String">Quentin Tarantino</span><span class="Normal">&quot;</span></pre>
<p>Sin embargo en este caso no se puede utilizar slicing, entre otras cosas porque los diccionarios no son secuencias, si no mappings (mapeados, asociaciones).</p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/01/21/python-tipos-basicos-ii-colecciones/feed/</wfw:commentRss>
		<slash:comments>7</slash:comments>
		</item>
		<item>
		<title>Python: Tipos básicos</title>
		<link>http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/</link>
		<comments>http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/#comments</comments>
		<pubDate>Thu, 17 Jan 2008 12:04:05 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[General]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[python]]></category>
		<category><![CDATA[tipos]]></category>
		<category><![CDATA[tutorial]]></category>

		<guid isPermaLink="false">http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/</guid>
		<description><![CDATA[En Python tenemos como tipos de datos simples números: enteros, de coma flotante y complejos, como pueden ser 3, 15.57 o 7 + 5j; cadenas de texto, como &#8220;Hola Mundo&#8221; y valores booleanos: True (cierto) y False (falso). Vamos a crear un par de variables a modo de ejemplo. Una de tipo cadena y una [...]]]></description>
			<content:encoded><![CDATA[<p>En Python tenemos como tipos de datos simples números: enteros, de coma flotante y complejos, como pueden ser 3, 15.57 o 7 + 5j; cadenas de texto, como &#8220;Hola Mundo&#8221; y valores booleanos: True (cierto) y False (falso).</p>
<p>Vamos a crear un par de variables a modo de ejemplo. Una de tipo cadena y una de tipo entero:</p>
<pre class="code"><span class="pythonComment"># esto es una cadena</span>
c = <span class="Normal">&quot;</span><span class="String">Hola Mundo</span><span class="Normal">&quot;</span>

<span class="pythonComment"># y esto es un entero</span>
e = 23

<span class="pythonComment"># podemos comprobarlo con la función type</span>
type(c)
type(e)</pre>
<p>Como veis en Python, a diferencia de muchos otros lenguajes, no se declara el tipo de la variable al crearla. En Java, por ejemplo, escribiríamos:</p>
<pre class="code">String c = <span class="String">&quot;Hola Mundo&quot;</span>;
<span class="Type">int</span> e = <span class="Number">23</span>;</pre>
<p><span id="more-1337"></span><br />
También nos ha servido nuestro pequeño ejemplo para presentaros los comentarios inline en Python: cadenas de texto que comienzan con el carácter &#8216;#&#8217; y que Python ignora totalmente. Hay más tipos de comentarios, de los que hablaremos más adelante.</p>
<h2>Números</h2>
<p>Como decíamos, en Python se pueden representar números enteros, reales y complejos.</p>
<h3>Enteros</h3>
<p>Los números enteros son aquellos que no tienen decimales, tanto positivos como negativos (además del cero). En Python se pueden representar mediante el tipo int (de integer, entero) o el tipo long (largo). La única diferencia es que el tipo long permite almacenar números más grandes. Es aconsejable no utilizar el tipo long a menos que sea necesario, para no malgastar memoria.</p>
<p>El tipo int de Python se implementa a bajo nivel mediante un tipo long de C. Y dado que Python utiliza C por debajo, como C, y a diferencia de Java, el rango de los valores que puede representar depende de la plataforma. En la mayor parte de las máquinas el long de C se almacena utilizando 32 bits, es decir, mediante el uso de una variable de tipo int de Python podemos almacenar números de -2<sup>31</sup> a 2<sup>31</sup> &#8211; 1, o lo que es lo mismo, de -2.147.483.648 a 2.147.483.647. En plataformas de 64 bits, el rango es de -9.223.372.036.854.775.808 hasta 9.223.372.036.854.775.807.</p>
<p>El tipo long de Python permite almacenar números de cualquier precisión, limitado por la memoria disponible en la máquina.</p>
<p>Al asignar un número a una variable esta pasará a tener tipo int, a menos que el número sea tan grande como para requerir el uso del tipo long.</p>
<pre class="code">
<span class="pythonComment"># type(entero) daría int</span>
entero = 23</pre>
<p>También podemos indicar a Python que un número se almacene usando long añadiendo una L al final:</p>
<pre class="code"><span class="pythonComment"># type(entero) daría long</span>
entero = 23L</pre>
<p>El literal que se asigna a la variable también se puede expresar como un octal, anteponiendo un cero:</p>
<pre class="code"><span class="pythonComment"># 027 octal = 23 en base 10</span>
entero = 027</pre>
<p>o bien en hexadecimal, anteponiendo un 0x:</p>
<pre class="code"><span class="pythonComment"># 0x17 hexadecimal = 23 en base 10</span>
entero = 0x17</pre>
<h3>Reales</h3>
<p>Los números reales son los que tienen decimales. En Python se expresan mediante el tipo float. En otros lenguajes de programación, como C, tenemos también el tipo double, similar a float pero de mayor precisión (double = doble precisión). Python, sin embargo, implementa su tipo float a bajo nivel mediante una variable de tipo double de C, es decir, utilizando 64 bits, luego en Python siempre se utiliza doble precisión, y en concreto se sigue el estándar IEEE 754: 1 bit para el signo, 11 para el exponente, y 52 para la mantisa. Esto significa que los valores que podemos representar van desde ±2,2250738585072020 x 10<sup>-308</sup> hasta ±1,7976931348623157&#215;10<sup>308</sup>.</p>
<p>La mayor parte de los lenguajes de programación siguen el mismo esquema para la representación interna. Pero como muchos sabréis esta tiene sus limitaciones, impuestas por el hardware. Por eso desde Python 2.4 contamos también con un nuevo tipo <a href="http://www.python.org/dev/peps/pep-0327/" title="Tipo Decimal en Python"><em>Decimal</em></a>, para el caso de que se necesite representar fracciones de forma más precisa. Sin embargo este tipo está fuera del alcance de este tutorial, y sólo es necesario para el ámbito de la programación científica y otros relacionados. Para aplicaciones normales podeis utilizar el tipo float sin miedo, como ha venido haciéndose desde hace años, aunque teniendo en cuenta que los números en coma flotante no son precisos (ni en este ni en otros lenguajes de programación).</p>
<p>Para representar un número real en Python se escribe primero la parte entera, seguido de un punto y por último la parte decimal.</p>
<pre class="code">real = 0.2703</pre>
<p>También se puede utilizar notación científica, y añadir una e (de exponente) para indicar un exponente en base 10. Por ejemplo:</p>
<pre class="code">real = 0.1e-3</pre>
<p>sería equivalente a 0.1 x 10<sup>-3</sup> = 0.1 x 0.001 = 0.0001</p>
<h3>Complejos</h3>
<p>Los números complejos son aquellos que tienen parte imaginaria. Si no conocías de su existencia, es más que probable que nunca lo vayas a necesitar, por lo que puedes saltarte este apartado tranquilamente. De hecho la mayor parte de lenguajes de programación carecen de este tipo, aunque sea muy utilizado por ingenieros y científicos en general.</p>
<p>En el caso de que necesitéis utilizar números complejos, o simplemente tengáis curiosidad, os diré que este tipo, llamado complex en Python, también se almacena usando coma flotante, debido a que estos números son una extensión de los números reales. En concreto se almacena en una estructura de C, compuesta por dos variables de tipo double, sirviendo una de ellas para almacenar la parte real y la otra para la parte imaginaria.</p>
<p>Los números complejos en Python se representan de la siguiente forma:</p>
<pre class="code">complejo = 2.1 + 7.8j</pre>
<h3>Operadores</h3>
<p>Veamos qué podemos hacer con nuestros números usando los operadores por defecto. Para operaciones más complejas podemos recurrir al módulo math.</p>
<h4>Operadores aritméticos</h4>
<table border="1" style="border-collapse: collapse;">
<tr>
<td><strong>Operador</strong></td>
<td><strong>Descripción</strong></td>
<td><strong>Ejemplo</strong></td>
</tr>
<tr>
<td>+</td>
<td>Suma</td>
<td>r = 3 + 2 # r es 5</td>
</tr>
<tr>
<td>-</td>
<td>Resta</td>
<td>r = 4 &#8211; 7 # r es -3</td>
</tr>
<tr>
<td>-</td>
<td>Negación</td>
<td>r = -7 # r es -7</td>
</tr>
<tr>
<td>*</td>
<td>Multiplicación</td>
<td>r = 2 * 6 # r es 12</td>
</tr>
<tr>
<td>**</td>
<td>Exponente</td>
<td>r = 2 ** 6 # r es 64</td>
</tr>
<tr>
<td>/</td>
<td>División</td>
<td>r = 3.5 / 2 # r es 1.75</td>
</tr>
<tr>
<td>//</td>
<td>División entera</td>
<td>r = 3.5 // 2 # r es 1.0</td>
</tr>
<tr>
<td>%</td>
<td>Módulo</td>
<td>r = 7 % 2 # r es 1</td>
</tr>
</table>
<p>Puede que tengáis dudas sobre cómo funciona el operador de módulo, y cuál es la diferencia entre división y división entera.</p>
<p>El operador de módulo no hace otra cosa que devolvernos el resto de la división entre los dos operandos. En el ejemplo, 7 / 2 sería 3, con 1 de resto, luego el módulo es 1.</p>
<p>La diferencia entre división y división entera no es otra que la que indica su nombre. En la división el resultado que se devuelve es un número real, mientras que en la división entera el resultado que se devuelve es solo la parte entera.</p>
<p>No obstante hay que tener en cuenta que si utilizamos dos operandos enteros, Python determinará que queremos que la variable resultado también sea un entero, por lo que el resultado de, por ejemplo, 3 / 2 y 3 // 2 sería el mismo: 1.</p>
<p>Si quisiéramos obtener los decimales necesitaríamos que al menos uno de los operandos fuera un número real, bien indicando los decimales</p>
<pre class="code">r = 3.0 / 2</pre>
<p>o bien utilizando la función float (no es necesario que sepais lo que significa el término función, ni que recordeis esta forma, lo veremos un poco más adelante):</p>
<pre class="code">r = float(3) / 2</pre>
<p>Esto es así porque cuando se mezclan tipos de números, Python convierte todos los operandos al tipo más complejo de entre los tipos de los operandos.</p>
<h4>Operadores a nivel de bit</h4>
<p>Si no conocéis estos operadores es poco probable que vayáis a necesitarlos, por lo que podéis obviar esta parte. Si aún así tenéis curiosidad os diré que estos son operadores que actúan sobre las representaciones en binario de los operandos.</p>
<p>Por ejemplo, si veis una operación como 3 &#038; 2, lo que estais viendo es un and bit a bit entre los números binarios 11 y 10 (las representaciones en binario de 3 y 2). El operador and (&#038;), del inglés &#8220;y&#8221;, devuelve 1 si el primer bit operando es 1 <strong>y</strong> el segundo bit operando es 1, luego el resultado de aplicar and bit a bit a 11 y 10 sería 10, o lo que es lo mismo, 2 en decimal (el primer dígito es 1 para ambas cifras, mientras que el segundo es 1 sólo para una de ellas).</p>
<p>El operador or (|), del inglés &#8220;o&#8221;, devuelve 1 si el primer operando es 1 <strong>o</strong> el segundo operando es 1</p>
<p>El operador xor u or exclusivo (^) devuelve 1 si uno de los operandos es 1 y el otro no lo es.</p>
<p>El operador not (~), del inglés &#8220;no&#8221;, sirve para negar uno a uno cada bit; es decir, si el operando es 0, cambia a 1 y si es 1, cambia a 0.</p>
<p>Por último los operadores de desplazamiento (<< y >>) sirven para desplazar los bits n posiciones hacia la izquierda o la derecha.</p>
<table border="1" style="border-collapse: collapse;">
<tr>
<td><strong>Operador</strong></td>
<td><strong>Descripción</strong></td>
<td><strong>Ejemplo</strong></td>
</tr>
<tr>
<td>&#038;</td>
<td>and</td>
<td>r = 3 &#038; 2 # r es 2</td>
</tr>
<tr>
<td>|</td>
<td>or</td>
<td>r = 3 | 2 # r es 3</td>
</tr>
<tr>
<td>^</td>
<td>xor</td>
<td>r = 3 ^ 2 # r es 1</td>
</tr>
<tr>
<td>~</td>
<td>not</td>
<td>r = ~3 # r es -4</td>
</tr>
<tr>
<td>&lt;&lt;</td>
<td>Desplazamiento a la izquierda</td>
<td>r = 3 &lt;&lt; 1 # r es 6</td>
</tr>
<tr>
<td>&gt;&gt;</td>
<td>Desplazamiento a la derecha</td>
<td>r = 3 &gt;&gt; 1 # r es 1</td>
</tr>
</table>
<h2>Cadenas</h2>
<p>Las cadenas no son más que texto encerrado entre comillas simples (&#8216;cadena&#8217;) o dobles (&#8220;cadena&#8221;). Dentro de las comillas se pueden añadir caracteres especiales escapándolos con &#8216;\&#8217;, como &#8216;\n&#8217;, el carácter de nueva línea, o &#8216;\t&#8217;, el de tabulación.</p>
<p>Una cadena puede estar precedida por el carácter &#8216;u&#8217; o el carácter &#8216;r&#8217;, los cuales indican, respectivamente, que se trata de una cadena que utiliza codificación Unicode y una cadena raw (del inglés, cruda). Las cadenas raw se distinguen de las normales en que los caracteres escapados mediante la barra invertida (\) no se sustituyen por sus contrapartidas. Esto es especialmente útil, por ejemplo, para las expresiones regulares.</p>
<pre class="code">unicode = <span class="Normal">u&quot;</span><span class="String">äóè</span><span class="Normal">&quot;</span>
raw = <span class="Normal">r&quot;</span><span class="pythonRawString">\n</span><span class="Normal">&quot;</span></pre>
<p>También es posible encerrar una cadena entre triples comillas (simples o dobles). De esta forma podremos escribir el texto en varias líneas, y al imprimir la cadena, se respetarán los saltos de línea que introdujimos sin tener que recurrir al carácter \n, así como las comillas sin tener que escaparlas.</p>
<p>Las cadenas también admiten operadores como la suma (concatenación de cadenas) y la multiplicación.</p>
<pre class="code">a = <span class="Normal">&quot;</span><span class="String">uno</span><span class="Normal">&quot;</span>
b = <span class="Normal">&quot;</span><span class="String">dos</span><span class="Normal">&quot;</span>

c = a + b <span class="pythonComment"># c es &quot;unodos&quot;</span>
c = a * 3 <span class="pythonComment"># c es &quot;unounouno&quot;</span>
</pre>
<h2>Booleanos</h2>
<p>Como decíamos el tipo booleano sólo puede tener dos valores: True (cierto) y False (falso). Estos valores son especialmente importantes para las expresiones condicionales y los bucles, como veremos más adelante.</p>
<p>En realidad el tipo bool (el tipo de los booleanos) es una subclase del tipo int. Puede que esto no tenga mucho sentido para tí si no conoces los términos de la orientación a objetos, que veremos más adelantes, aunque tampoco es nada importante.</p>
<p>Estos son los distintos tipos de operadores con los que podemos trabajar con valores booleanos, los llamados operadores lógicos o condicionales:</p>
<table border="1" style="border-collapse: collapse;">
<tr>
<td><strong>Operador</strong></td>
<td><strong>Descripción</strong></td>
<td><strong>Ejemplo</strong></td>
</tr>
<tr>
<td>and</td>
<td>¿se cumple a y b?</td>
<td>r = True and False # r es False</td>
</tr>
<tr>
<td>or</td>
<td>¿se cumple a o b?</td>
<td>r = True or False # r es True</td>
</tr>
<tr>
<td>not</td>
<td>No a</td>
<td>r = not True # r es False</td>
</tr>
</table>
<p>Los valores booleanos son además el resultado de expresiones que utilizan operadores relacionales (comparaciones entre valores):</p>
<table border="1" style="border-collapse: collapse;">
<tr>
<td><strong>Operador</strong></td>
<td><strong>Descripción</strong></td>
<td><strong>Ejemplo</strong></td>
</tr>
<tr>
<td>==</td>
<td>¿son iguales a y b?</td>
<td>r = 5 == 3 # r es False</td>
</tr>
<tr>
<td>!=</td>
<td>¿son distintos a y b?</td>
<td>r = 5 != 3 # r es True</td>
</tr>
<tr>
<td>&lt;</td>
<td>¿es a menor que b?</td>
<td>r = 5 < 3 # r es False</td>
</tr>
<tr>
<td>&gt;</td>
<td>¿es a mayor que b?</td>
<td>r = 5 > 3 # r es True</td>
</tr>
<tr>
<td>&lt;=</td>
<td>¿es a menor o igual que b?</td>
<td>r = 5 <= 5 # r es True</td>
</tr>
<tr>
<td>&gt;=</td>
<td>¿es a mayor o igual que b?</td>
<td>r = 5 >= 3 # r es True</td>
</tr>
</table>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2008/01/17/python-tipos-basicos/feed/</wfw:commentRss>
		<slash:comments>44</slash:comments>
		</item>
		<item>
		<title>Javascript: Variables, Constantes y Tipos de Datos</title>
		<link>http://mundogeek.net/archivos/2004/07/22/javascript-variables-constantes-y-tipos-de-datos/</link>
		<comments>http://mundogeek.net/archivos/2004/07/22/javascript-variables-constantes-y-tipos-de-datos/#comments</comments>
		<pubDate>Thu, 22 Jul 2004 20:55:42 +0000</pubDate>
		<dc:creator>Zootropo</dc:creator>
				<category><![CDATA[Javascript]]></category>
		<category><![CDATA[Programación]]></category>
		<category><![CDATA[constantes]]></category>
		<category><![CDATA[programacion]]></category>
		<category><![CDATA[tipos]]></category>
		<category><![CDATA[variables]]></category>

		<guid isPermaLink="false">http://zootropo.f2o.org/archivos/2004/07/22/javascript-variables-constantes-y-tipos-de-datos/</guid>
		<description><![CDATA[Los tipos de datos básicos de JavaScript son los números, como 3 o 15.57; las cadenas, como &#8220;Hola Mundo&#8221;; los valores booleanos, cuyo valor puede ser true (cierto) o false (falso); el valor especial null, que indica un valor nulo y el valor especial undefined, que indica que no se definió ningún valor para la [...]]]></description>
			<content:encoded><![CDATA[<p>Los tipos de datos básicos de JavaScript son los números, como 3 o 15.57; las cadenas, como &#8220;Hola Mundo&#8221;; los valores booleanos, cuyo valor puede ser <code>true</code> (cierto) o <code>false</code> (falso); el valor especial <code>null</code>, que indica un valor nulo y el valor especial <code>undefined</code>, que indica que no se definió ningún valor para la variable.</p>
<p>Además de estos tipos de datos básicos también tenemos matrices, matrices asociativas o hashes, en las que se accede a una posición de la matriz a través de una clave en forma de cadena en lugar de un índice que indique su posición en la matriz; funciones y objetos, que funcionan como una especie de matrices asociativas.</p>
<p>En JavaScript, al igual que ocurre en otros lenguajes como Lisp, la definición de los tipos de los datos se hace de forma dinámica, es decir, una variable no está limitada a contener el tipo de dato que se indicó al declarar la variable, sino que puede contener primero un número, y mas tarde pasar a contener una cadena de texto, por ejemplo. De hecho en JavaScript al declarar las variables (con la palabra clave <code>var</code>) no se define un tipo para esa variable.</p>
<p>En Java o C++, por ejemplo, para declarar e inicializar variables haríamos algo parecido a esto:</p>
<pre name="code" class="java">int miNumero=7;
String miCadena="Hola Mundo";</pre>
<p>es decir, indicamos el tipo de la variable, el nombre y su valor. Sin embargo en JavaScript se usaría:</p>
<pre name="code" class="javascript">var miVariable=7;
miVariable="Hola Mundo";</pre>
<p>indicando simplemente el nombre y el valor de inicio, sin necesidad de especificar el tipo de la variable.</p>
<p>Podríamos, incluso, prescindir totalmente de declarar la variable, ya que, si al intentar asignar un valor a una variable, JavaScript comprueba que esta no ha sido declarada, este la declarará automáticamente:</p>
<pre name="code" class="javascript">miNumero=7;
miCadena="Hola Mundo";</pre>
<p>Por último, en Javascript también se pueden declarar constantes como en C++ o Java, mediante la palabra clave <code>const</code>:</p>
<pre name="code" class="javascript">const pi = 3.14159;</pre>
<link type="text/css" rel="stylesheet" href="http://mundogeek.net/sh/css/SyntaxHighlighter.css"></link>
<script language="javascript" src="http://mundogeek.net/sh/js/shCore.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushJScript.js"></script><br />
<script language="javascript" src="http://mundogeek.net/sh/js/shBrushJava.js"></script><br />
<script language="javascript">dp.SyntaxHighlighter.ClipboardSwf = 'http://mundogeek.net/sh//flash/clipboard.swf';
dp.SyntaxHighlighter.HighlightAll('code');</script></p>
]]></content:encoded>
			<wfw:commentRss>http://mundogeek.net/archivos/2004/07/22/javascript-variables-constantes-y-tipos-de-datos/feed/</wfw:commentRss>
		<slash:comments>16</slash:comments>
		</item>
	</channel>
</rss>

