Python: Vida y muerte de una variable

Objetivo: entender el concepto de ámbito de una variable y la clasificación de estas en globales y locales.

En un principio el mundo era sencillo y nuestros programas simples:

# Ejemplo 1

a = 1
b = 2

print(a)
print(b)

>>> 
1
2

Nuestras variables nacían, correteaban a sus anchas por el programa y cambiaban de valor según el guión establecido.

Debemos decir que, en Python, al contrario de lo que sucede en otros lenguajes, las variables no se declaran. Se crean justo en el momento en el que reciben por asignación un valor por primera vez y, a partir de ese momento, ya pueden formar parte de una expresión. Se produce un error si una variable es utilizada antes de que realice esa asignación inicial.

Hay que matizar, además, que cuando empleamos el término variable estamos refiriéndonos en realidad a su nombre. En Python es importante diferenciar el nombre de una variable del objeto real al que referencia. Sabemos que una simple asignación, como a = 1, se ocupa de crear el objeto 1, si no existe ya, y de etiquetarlo bajo el nombre a. Es más, por cuestiones de economía, un mismo objeto puede estar etiquetado con varios nombres de variable, como muestra el ejemplo 2:

Ejemplo 2

>>> a = 1
>>> b = 1
>>> a is b
True

Las variables a y b referencian al mismo objeto. Si ahora cualquiera de ellas cambiara con una nueva asignación, este vínculo común, naturalmente, desaparecería y cada nombre etiquetaria a su respectivo objeto valor.

En este escenario de plácida convivencia introdujimos un nuevo nivel de complejidad y aparecieron las funciones, como cajas negras dispuestas a facilitarnos la reutilización del código.

# Ejemplo 3

def cajanegra():
    c = 3
    print(c)

a = 1
b = 2

print(a)
print(b)
cajanegra()

>>> 
1
2
3

Y desde ese momento empezó la jerarquización. Como sucede en nuestro mundo, en el que lo fácil o difícil que será la vida depende bastante del lugar de nacimiento, lo mismo ocurre con los nombres de variables. A las variables que residen fuera de toda función, como a y b en el ejemplo, se las demomina globales, mientras aquellas que son creadas en las funciones reciben el nombre de locales.

Las variables locales, al contrario que las globales, tienen una vida efímera. Solo existen durante el momento en el que es llamada la función. En el momento en el que esta concluye, desaparecen, pasando por el programa sin pena ni gloria.

Además, solo son visibles dentro de la función; para el resto del código son completamente inexistentes. En el ejemplo anterior, tratar de usar la variable c desde el cuerpo del programa principal ocasionaría un error.

La zona del programa en la que una variable puede ser utilizada es lo que se conoce como su ámbito. Decimos que el ámbito de una variable local está limitado al código de la función en la que está definida.

Para ilustrar este concepto con claridad, vamos a construir un escenario en el que supuestamente hay un conflicto de nombres entre una variable global y otra local:

# Ejemplo 4

def cajanegra():
    c = 3
    print('La variable c dentro de la función tiene por valor', c)

a = 1
b = 2
c = 5

print(a)
print(b)
cajanegra()
print('La variable c fuera de la función tiene por valor', c)

>>> 
1
2
La variable c dentro de la función tiene por valor 3
La variable c fuera de la función tiene por valor 5

Observa que no existe tal conflicto. No tiene nada que ver la variable c de dentro de la función a la variable c de fuera, a pesar de tener el mismo nombre. Residen en espacios de nombres diferentes. Pese al hecho de haber asignado el valor 3 a la variable dentro de la función, su valor fuera de ella no se ha visto afectado en absoluto.

Las variables locales no son solo las que están dentro del cuerpo de una función. También lo son los argumentos formales empleados en su declaración.

En el ejemplo 5, las variables x, y y c son todas locales:

# Ejemplo 5

def cajanegra(x, y):
    c = x + y
    print(c)

a = 1
b = 2
cajanegra(a, b)

>>> 
3

En el momento en el la función es invocada, x e y reciben su asignación; en este caso, el valor de las variables a y b, respectivamente.

Las variables globales tienen la particularidad de que también son visibles dentro de la función:

# Ejemplo 6

def cajanegra():
    c = 3
    print(a)
    print(b)
    print(c)

a = 1
b = 2
cajanegra()

>>> 
1
2
3

Sin embargo, todo intento de modificar una variable global desde dentro de una función mediante una nueva asignación fracasa, como podemos comprobar en el ejemplo 7:

# Ejemplo 7

def cajanegra():
    c = 3
    print(a)
    b = 5
    print('La variable b dentro de la función vale', b)
    print(c)

a = 1
b = 2
cajanegra()
print('La variable b fuera de la función sigue valiendo', b)

>>> 
1
La variable b dentro de la función vale 5
3
La variable b fuera de la función sigue valiendo 2

Lo importante a comprender es que, desde el preciso momento en el que una variable recibe una asignación dentro de una función, pasa a ser calificada como local. Cuando eso ocurre, la variable tiene una visibilidad limitada al cuerpo de la función y deja de ser considerada como global si ya existía el nombre en el ámbito exterior. Por eso, en el ejemplo, la variable a es global, mientras que b y c son locales.

Dentro de una función, la misma variable no puede ser en unos momentos global y en otros local. Si hay una asignación, aunque sea posterior a su uso como variable global, la variable será considerada local y se producirá un error:

# Ejemplo 8

def cajanegra():
    c = 3
    print(b)
    b = 5

a = 1
b = 2
cajanegra()

>>> 
Traceback (most recent call last):
  File "C:\Users\Javier\Dropbox\pythonprad\pruebas\probando.py", line 45, in <module>
    cajanegra()
  File "C:\Users\Javier\Dropbox\pythonprad\pruebas\probando.py", line 40, in cajanegra
    print(b)
UnboundLocalError: local variable 'b' referenced before assignment

El mensaje es concluyente: la variable b ha sido referenciada antes de haber recibido una asignación, algo prohibido en Python. Si no hubiese existido la asignación en la tercera línea del cuerpo de cajanegra(), b hubiese sido considerada una variable global y el codigo sería válido. Sin embargo, la asignación hace que b se trate como local, invalidando su rol global.

En numerosas ocasiones puede resultar conveniente no solo poder acceder a una variable global desde dentro de una función, sino poder cambiar su valor mediante una nueva asignación. Para lograr esto, hay que calificar la variable externa dentro de la función empleando la palabra global.

# Ejemplo 9

def cajanegra():
    c = 3
    global b
    b = 5
    print('Dentro de la función b vale', b)

a = 1
b = 2
cajanegra()
print('Fuera de la función b también vale', b)

>>> 
Dentro de la función b vale 5
Fuera de la función b también vale 5

Al calificar b como global dentro de la función estamos indicando que las asignaciones posteriores de esa variable se realizarán en un ámbito global en vez de local, modificando así el valor externo.

Hay que usar las variables globales con precaución. Permitir a las funciones que modifiquen nuestras variables externas es una práctica que puede dificultar la localización de errores cuando las cosas no funcionan como debieran. Sin embargo, son muy útiles para almacenar información de estado que luego podrá recuperarse al invocar nuevamente la función u otra diferente. En el ejemplo siguiente, utilizamos la variable global suma para retener el efecto de cada invocación a la función:

# Ejemplo 10

def sumar5():
    global suma
    suma = suma + 5
    print('La nueva suma es', suma)

suma = 0
sumar5()
sumar5()
sumar5()

>>> 
La nueva suma es 5
La nueva suma es 10
La nueva suma es 15

Cada invocación a sumar5() agrega cinco al valor de suma. La variable suma ha sido declarada como global dentro de la función para poder actualizar el valor externo, que será utilizado nuevamente al volver a llamar a la función.

Existe otro calificativo, además de global, con el que podemos etiquetar las variables dentro de una función. En el siguiente artículo lo presentaremos en sociedad.

Javier Montero Gabarró


Python: Vida y muerte de una variable


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Construcción de acordes – 22: mayor con oncena aumentada

Objetivo: aprender a construir el acorde con séptima mayor, novena y oncena aumentada.

En la anterior entrega presentamos el hermano «feo» de la extensión del acorde mayor hasta la oncena: séptima mayor con novena y oncena. Y aunque en música es injusto denominar a un acorde feo, lo hicimos así para resaltar la disonancia que provoca la oncena (que no es más que una cuarta una octava por encima) en un acorde en el que ya existe la tercera. En cierto modo, enturbia el carácter mayor del acorde, cuestionando el grado que técnicamente determina esa denominación.

No obstante, debe quedar claro que no es un acorde a desestimar en absoluto. Es siempre una opción más para el compositor o arreglista.

Para salvar esa disonancia es común usar la oncena aumentada en lugar de justa, dotando al acorde mayor de un colorido peculiar que no compromete su función.

Su fórmula es, por lo tanto:

maj7(9)(#11) --> 1 - 3 - 5 - 7 - 9 - #11

Generalmente, cuando se habla de un acorde de oncena (o trecena, como veremos pronto), se sobreentienden implícitas las tensiones intermedias. Así, en el título, mayor con oncena aumentada, ademas de la #11 estoy presuponiendo la existencia de la séptima mayor y la novena mayor. Sin embargo, prefiero utilizar la denominación extendida, pues deja explícitos los grados que estoy empleando (por ejemplo, como guitarrista, por cuestiones prácticas puedo preferir una variante del acorde de oncena aumentada en la que no figure la novena).

Como siempre, calcularemos las notas de un par de acordes de ejemplo: Cmaj7(9)(#11) y Amaj7(9)(#11).

Las escalas mayores respectivas, construidas sobre cada fundamental y extendidas hasta la oncena, son:

Do mayor --> C - D - E - F - G - A - B - C - D - E - F

La mayor --> A - B - C# - D - E - F# - G# - A - B - C# - D

Si tomamos los grados indicados en la fórmula: 1, 3, 5, 7, 9 y #11

Cmaj7(9)(#11) --> C - E - G - B - D - F#

Amaj7(9)(#11) --> A - C# - E - G# - B - D#

Otro acorde más para la colección. Ya sabes, experiméntalo en tu instrumento.

Javier Montero Gabarró


Construcción de acordes – 22: mayor con oncena aumentada


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de todos los artículos de armonía.

MiKTeX: LaTeX en tu máquina Windows

Objetivo: presentar MiKTeX, una excelente distribución LaTeX para el sistema operativo Windows.

\LaTeX enamora… Su aprendizaje aparenta ser complejo, pero a poco que uno se adentra en sus entrañas se queda fascinado por la elegancia de los resultados que se obtienen. Escribir código en \LaTeX es divertido y nos hace sentir el poder de la programación aplicada a la tipografía digital.

El mundo \LaTeX está disponible gratuitamente en cualquier plataforma. La manera más cómoda de disfrutarlo es a través de una distribución que integre todo el paquete de herramientas que intervienen en el proceso de generación del documento final, como el editor, los compiladores y otras utilidades como el gestor bibliográfico.

En la red hay infinidad de recursos gratuitos para aprender \LaTeX. Sin ir más lejos, en este mismo blog hay abundante material que actualizo cada vez que tengo ocasión.

Mis primeros pasos en en \LaTeX fueron a través de MikTeX, una distribución de código abierto dirigida expresamente a la plataforma Windows. En este artículo mostraré lo sencilla que es su instalación y compilaremos un fichero de ejemplo que servirá como primera aproximación al entorno.

Lo primero es descargarlo desde la página oficial:

miktex-download

La opción recomendada, que es la que instalaremos aquí, contiene la distribución básica, en la que se incluyen, además del editor y los compiladores, los paquetes más comunmente empleados. En el caso de que necesitemos otros que no figuren en la instalación inicial, la aplicación los descargará desde su repositorio en internet sin necesidad de nuestra intervención. Por otro lado, incorpora mecanismos que nos permiten mantener siempre la última versión de cada paquete, ocupándose de que nuestro sistema se encuentre siempre perfectamente actualizado.

Si haces clic sobre Other downloads verás otras opciones de descarga posibles, entre las que se encuentra la distribución completa (¡varios miles de paquetes!), una versión portable y otra para sistemas de 64 bits.

La instalación es simple, la típica de Windows: descargar – doble clic – pulsar siguiente, siguiente.

Haz doble clic sobre el fichero descargado para comenzar el proceso.

miktex-1

Acepta las condiciones de redistribución y se habilitará el botón mágico de Windows: Siguiente.

miktex-2

¿Lo usarás tú solo o también cualquier otro usuario configurado en la máquina?

miktex-3

El directorio en el que se instalará la aplicación. Salvo que tengas un buen motivo para cambiarlo, lo mejor es que no lo toques.

miktex-4

Este cuadro es importante. En primer lugar te pregunta por el tamaño por defecto del papel. Típicamente será A4. Esto te ahorrará tener que indicarlo cada vez en el fichero fuente .tex.

¿Cómo se comportará MiKTeX cuando le indiques que vas a utilizar un paquete que no está instalado? ¿Quieres que lo descargue por ti? La opción por defecto, Ask me first, es la recomendada: te preguntará primero antes de hacerlo. Si deseas ahorrarte ese paso, puedes elegir . Selecciona No si prefieres instalar los paquetes por tu cuenta.

miktex-5

Una pequeña revisión de las opciones elegidas. Pulsa Start, si estás de acuerdo, para que comience formalmente la instalación en el disco duro.

miktex-6

Si el proceso concluye con esta ventana será señal de que todo ha ido tal como se esperaba.

Para probar la instalación, nada mejor que escribir un documento \LaTeX y generar el resultado.

En Inicio | Todos los programas, localiza la carpeta MiKTeX 2.9 y elige TeXworks, el editor \LaTeX incluido en MiKTeX.

miktex-7

Escribe un texto \LaTeXcomo el del ejemplo y pulsa el botón verde presente en la parte superior izquierda. Si no lo has hecho ya, te pedirá que salves el fichero previamente (con extensión .tex) y, a continuación, iniciará su compilación. En la zona inferior de la pantalla podrás comprobar la evolución de todo el proceso. Si no se producen errores, se te abrirá una nueva ventana con un visor del pdf final generado.

miktex-8

Ya tienes toda la potencia de \LaTeXinstalada en tu máquina Windows; que comience la diversión…

Javier Montero Gabarró


MiKTeX: LaTeX en tu máquina Windows


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice completo de artículos relacionados con \LaTeX.

Salir o no salir, esa es la cuestión

Reconozcámoslo: hay días en los que estamos deseando que llegue el momento de calzarnos las zapatillas para salir a la calle y echar a correr sin vacilación, pero hay otros en los que nos cuesta la misma vida arrancar.

Son días en los que nos quedamos atrapados en el círculo vicioso de la duda; ¿salir o no salir?, esa es la cuestión. Y miramos el reloj buscando en él algo de compasiva aprobación: aún es pronto, nos decimos, podemos permitirnos hundirnos algo más en este pozo de estatismo, en un rato nos vestiremos.

Pero la próxima vez que miramos la hora comprobamos, aparentemente consternados, pero en el fondo aliviados, que ya es demasiado tarde y hemos perdido el tren: no saldremos a correr.

Sin embargo, ese tren raras veces existe salvo en nuestro propio autoengaño. En la mayoría de las ocasiones nunca es tarde para salir a correr y, cuando realmente hay una hora límite, casi siempre tenemos la posibilidad de optar por correr menos tiempo. Correr 15 minutos, cuando no se puede una hora, siempre será infinitamente más provechoso que no correr nada.

Este escenario puede resultarte familiar, ocasionalmente. Si te ocurre con relativa frecuencia es una señal inequívoca de que algo está fallando y debes tratar de descubrir qué es lo que ha hecho descender tu grado de motivación.

Se trata, ante todo, de un ejercicio de honestidad. Quizás tus objetivos se te queden grandes y no has evaluado sinceramente tu disposición a pagar el precio por conseguirlos. O, por el contrario, tal vez sean pequeños o incluso inexistentes y debas proponerte un reto que estimule tu afán de superación.

A menudo nos exigimos tanto que se nos hace un verdadero mundo cumplir con nuestro día a día. Esto sucede en todos los ámbitos, no solo en el deportivo. Existe tanta desconexión entre nuestras expectativas y nuestra capacidad efectiva que perdemos la motivación. Y somos tan drásticos que, en estos casos, preferimos no hacer nada a hacerlo a medias.

No existe mayor estupidez. En nuestro caso, olvidamos que el principal placer de esta actividad sucede durante su ejecución y durante las horas posteriores. Si te exiges tanto que salir a correr se te ha convertido en un sufrimiento, afloja el ritmo, corre menos tiempo y recupera otra vez esas sensaciones tan especiales que sin duda conoces y, con tu ridícula prisa, has dejado atrás.

Si te quedas en casa ya sabes lo que te espera: más de lo mismo. Échate a la calle sin pensártelo dos veces, ponte a correr y disfruta. Cuando vuelvas, rebosante de endorfinas, te estará esperando esa maravillosa sensación de estar en lo más alto del mundo.

Si estás atrapado en una espiral de inmovilidad, puedes proponerte el siguiente trato: sal a correr 5 minutos, solo cinco minutos; si luego decides no seguir eres libre de volver a casa. Pero una vez arrancas ya no hay quien te pare. Tanto darle vueltas al coco cuando el único problema era dar el primer paso…

Hoy, afortunadamente, no he perdido tiempo en estas disquisiciones. El clima, además, invitaba a no hacerlo. Ya antes de vestirme estaba paladeando, tramo a tramo, la nueva ruta que seguiría.

11’59 Km; 1h y 8 minutos; 5:56/Km

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/12/salir-o-no-salir-esa-es-la-cuestion/


Puedes consultar el índice completo de artículos pertenecientes a la categoría running.


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta

Guitarra: Acorde mayor en segunda posición CAGED

Objetivo: presentar, a lo largo del mástil, el acorde mayor en segunda posición CAGED o posición «A» (La).

Una vez el estudiante logra manejarse con su primer gran reto, el acorde Fa mayor con cejilla en el primer traste, que ya sabemos que no es otro sino Fa mayor en cuarta posición CAGED, o posición «E», Mi, se encuentra con una nueva barrera: la forma de La mayor (A) con cejilla.

Típicamente suele aparecer cuando se tiene que construir un Si bemol mayor (Bb), acorde presente en la tonalidad de Fa mayor, una de las primeras que se suelen aprender cuando ya se dominan Sol, Do y Re mayor.

Es un acorde que lleva su tiempo aprender; la mayor separación entre los dedos índice y corazón (cuando no se emplea una digitación con doble cejilla), resta fuerza al primero, dificultando la obtención de un sonido limpio. Pero, como todo en la guitarra, la paciencia y la perseverancia hacen milagros.

Y aunque el acorde con cejilla en forma de MI puede resolver perfectamente la necesidad de un Si bemol mayor, como podemos ver en la figura, por lo general, el guitarrista que comienza no se siente cómodo sumergiéndose en semejantes profundidades (pese al hecho de que es más fácil, si la guitarra no tiene el mástil excesivamente curvado, hacer el acorde Si bemol en el sexto traste que Fa mayor en el primero) y prefiere mantenerse lo más cerca posible del clavijero.

Pero comencemos por el principio. Todo surge a partir del acorde La mayor con cuerdas al aire:

De las cinco letras de la palabra CAGED, A (La) es la segunda, por eso lo denominamos La mayor en segunda posición CAGED.

Si identificas las notas que constituyen este acorde obtienes, de izquierda a derecha:

x – A – E – A – C# – E

También es importante que conozcas composición de esta voz atendiendo a sus grados:

x – 1 – 5 – 1 – 3 – 5

Observa, en particular, la disposición de las fundamentales, presentes en la quinta y en la tercera cuerda. Siempre que un acorde, del tipo que sea, ofrezca esta misma configuración de fundamentales, diremos que se encuentra en segunda posición CAGED, o «A»:

2ª posición

Nuestra mejor referencia es la fundamental en la quinta cuerda: localizándola podremos construir cualquier acorde sin más que extender una cejilla sobre ella con el primer dedo y configurando la posición «A» con los dedos restantes (o con una segunda cejilla con el dedo anular o el meñique).

Por ejemplo, un semitono más alto de la posición al aire obtenemos el acorde Si bemol mayor (Bb):

Observa que la nota que está sonando en la quinta cuerda, en el primer traste, es precisamente Si bemol.

Si dibujamos la cejilla sobre el segundo traste obtenemos Si mayor (B):

En el tercer traste, Do mayor:

Y así sucesivamente hasta llegar al traste doce, donde construimos nuevamente La mayor (A).

Con el acorde en forma «A», junto al de forma «E», tenemos buenos cimientos para construir con comodidad cualquier acorde mayor.

Imagina que quieres hacer la sonar la siguiente progresión en Re mayor empleando acordes con cejilla:

| G / A / | D / / / |

Sol (G) y La (A) los obtienes fácilmente de la posición «E» empleando cejillas en el tercer y quinto traste, respectivamente. Pero para dibujar Re mayor (D) deberías situarte en el décimo traste, lo que quizás pueda resultarte muy alejado de los anteriores y demasiado próximo al final del mástil libre.

Una opción, entonces es cambiar de forma y emplear la posición «A». Localizamos la nota Re en el quinto traste de la quinta cuerda y es ahí donde configuramos el acorde. No hace falta ni cambiar la cejilla de sitio, pues permanece a la misma altura que el acorde anterior, La mayor (A).

Conviene que te familiarices cuanto antes con los acordes mayores en cuarta y segunda posición CAGED. Son esenciales para convertirte en un guitarrista versátil.

Javier Montero Gabarró


Guitarra: Acorde mayor en segunda posición CAGED


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de la categoría Guitarra.

Índice de la categoría Armonía.

MySQL: Polvo somos y en polvo nos convertiremos

Objetivo: revisar los comandos de creación y destrucción de bases de datos, tablas y registros en MySQL.

Con toda nuestra ilusión y repletos de esperanza, creamos una base de datos:

mysql> CREATE DATABASE circunstancias;
Query OK, 1 row affected (0.01 sec)

Una más en la familia:

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cdcol              |
| circunstancias     |
| mysql              |
| performance_schema |
| phpmyadmin         |
| test               |
| webauth            |
+--------------------+
8 rows in set (0.01 sec)

Para trabajar con ella, primero la seleccionamos:

mysql> USE circunstancias;
Database changed

Dándole sentido a nuestra existencia, poblamos la incipiente base de datos con tablas a doquier:

mysql> CREATE TABLE anhelos
    -> (
    -> deseo VARCHAR(50),
    -> fecha DATE
    -> );
Query OK, 0 rows affected (0.02 sec)

mysql> CREATE TABLE objetivos
    -> (
    -> objetivo VARCHAR(50),
    -> fecha DATE
    -> );
Query OK, 0 rows affected (0.05 sec)

Nos autocomplacemos contemplando la estructura de nuestras posesiones:

mysql> DESC anhelos;
+-------+-------------+------+-----+---------+-------+
| Field | Type        | Null | Key | Default | Extra |
+-------+-------------+------+-----+---------+-------+
| deseo | varchar(50) | YES  |     | NULL    |       |
| fecha | date        | YES  |     | NULL    |       |
+-------+-------------+------+-----+---------+-------+
2 rows in set (0.02 sec)

mysql> DESC objetivos;
+----------+-------------+------+-----+---------+-------+
| Field    | Type        | Null | Key | Default | Extra |
+----------+-------------+------+-----+---------+-------+
| objetivo | varchar(50) | YES  |     | NULL    |       |
| fecha    | date        | YES  |     | NULL    |       |
+----------+-------------+------+-----+---------+-------+
2 rows in set (0.01 sec)

mysql> SHOW TABLES;
+--------------------------+
| Tables_in_circunstancias |
+--------------------------+
| anhelos                  |
| objetivos                |
+--------------------------+
2 rows in set (0.00 sec)

Y empezamos a coleccionar, a acumular datos sin ton ni son y nos engañamos creyendo que eso da sentido a nuestras vidas:

mysql> INSERT INTO anhelos VALUES
    -> ('Viajar a Marte', '2015-12-31'),
    -> ('Aprender la receta  de las patatas bravas', '2013-7-31');
Query OK, 2 rows affected (0.06 sec)
Records: 2  Duplicates: 0  Warnings: 0

mysql> SELECT * FROM anhelos;
+-------------------------------------------+------------+
| deseo                                     | fecha      |
+-------------------------------------------+------------+
| Viajar a Marte                            | 2015-12-31 |
| Aprender la receta  de las patatas bravas | 2013-07-31 |
+-------------------------------------------+------------+
2 rows in set (0.01 sec)

Pero, ¿por qué engañarme? Nunca iré a Marte; nunca aprenderé la receta de la salsa de las patatas bravas.

Y nada es eterno. Ni nuestros datos:

mysql> DELETE FROM anhelos;
Query OK, 2 rows affected (0.05 sec)

mysql> SELECT * FROM anhelos;
Empty set (0.00 sec)

Ni nuestras tablas:

mysql> DROP TABLE anhelos;
Query OK, 0 rows affected (0.03 sec)

mysql> DROP TABLE objetivos;
Query OK, 0 rows affected (0.03 sec)

mysql> SHOW TABLES;
Empty set (0.00 sec)

Ni nuestra base de datos:

mysql> DROP DATABASE circunstancias;
Query OK, 2 rows affected (0.13 sec)

mysql> SHOW DATABASES;
+--------------------+
| Database           |
+--------------------+
| information_schema |
| cdcol              |
| mysql              |
| performance_schema |
| phpmyadmin         |
| test               |
| webauth            |
+--------------------+
7 rows in set (0.01 sec)

Ni nosotros mismos:

mysql> quit
Bye

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/12/mysql-polvo-somos-y-en-polvo-nos-convertiremos/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


¡Accede al índice con todos los artículos sobre MySQL!

Python: Funciones para ricos y funciones para pobres

Objetivo: mostrar que las funciones son objetos e ilustrar su uso como argumentos de otras funciones.

Lo hemos dicho ya en alguna que otra ocasión: en Python todo son objetos. Incluso una función es un objeto.

Obsérvalo:

>>> def saluda(nombre):
  print('Hola', nombre)

>>> saluda('Javier')
Hola Javier

>>> type(saluda)
<class 'function'>
>>> print(saluda)
<function saluda at 0x02500078>

Esta circunstancia nos permite ciertos usos que pueden parecer estrambóticos a simple vista. Si una función es un objeto, tiene derecho a que se le trate como tal, bajo riesgo de protestar por agravio comparativo.

Entre otras cosas, tiene derecho a que se use su nombre en asignaciones:

>>> bienvenida = saluda

De modo que ya podemos realizar invocaciones como:

>>> bienvenida('Pedro')
Hola Pedro

Ambos nombres, saluda y bienvenida, referencian al mismo objeto función:

>>> id(bienvenida)
38797432
>>> id(saluda)
38797432

El nombre de una función también puede ser pasado como argumento de otra función.

Vamos a ilustrarlo con un ejemplo muy sencillo. Imagínate que tenemos dos funciones de tarificación diferentes por un mismo servicio. A los clientes normales les aplicaremos un rasero, pero a los más pudientes les daremos una pequeña clavada y su factura será mayor.

def tarifar(horas):
    importe = horas * 20 # Cobramos 20 euros la hora
    return importe

def tarifarplus(horas):
    importe = horas * 60 # Cobramos 60 euros la hora
    return importe

La función tarifar() toma como argumento el número de horas trabajadas y devuelve el importe correspondiente a una tasa de 20 euros la hora. La función tarifarplus() tiene como diferencia el pequeño detalle de que el precio por hora es mayor.

Observa ahora la definición de esta otra función:

def facturar(funcion_tarificacion, horas):
    return funcion_tarificacion(horas)

Como argumentos le pasaremos, además de las horas empleadas, el nombre de la función con la que realizaremos la facturación, función que será empleada para devolver el importe final.

Veamos un ejemplo de invocación de la función facturar() en un intérprete interactivo:

Si tienes poco dinero:

>>> facturar(tarifar, 5)
100

Pero, si te sobra la pasta, te mereces pagar más:

>>> facturar(tarifarplus, 5)
300

Justicia social.

Javier Montero Gabarró


Python: Funciones para ricos y funciones para pobres


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Consulta el índice completo de artículos relacionados con Python.

Guitarra: Acorde mayor en cuarta posición CAGED


Objetivo: aprender 12 acordes mayores partiendo de una única forma, la cuarta posición CAGED.

Antes de que entremos en materia, analicemos el título del artículo: acorde mayor en cuarta posición CAGED. He facilitado unos hiperenlaces que apuntan a otros artículos del blog con información complementaria; no estaría mal que los revisaras, en caso de dudas. En resumen:

Un acorde mayor es aquel que tiene por fórmula:

Mayor: 1 – 3 – 5

Pertenece al grupo de las tríadas, ya que solo figuran tres notas en su composición: la fundamental, la tercera mayor y la quinta justa.

Cuando digo cuarta posición CAGED, me estoy refiriendo a una disposición concreta de las fundamentales: precisamente la misma que tiene el acorde MI mayor, E en notación anglosajona, la cuarta letra de la palabra CAGED, empleando notas al aire. También podría haberme referido a esta forma como CAGED «E». Si te has leído el artículo mencionado, sabrás que la primera forma es CAGED «C», la segunda CAGED «A», y así sucesivamente con el resto de las letras de CAGED.

Conviene que entiendas esta nomenclatura, pues recurriré a ella en numerosas ocasiones.

He aquí nuestro flamante acorde MI mayor con notas al aire:

Analicemos las notas que lo constituyen de izquierda a derecha. Si tienes problemas en realizar este cálculo te sugiero le eches un vistazo al artículo Localización de las notas en el mástil de la guitarra.

E – B – E – G# – B – E

Aunque sean 6 notas, sólo hay de tres tipos: E – G# – B

que son precisamente las que obtenemos al aplicar la fórmula de la tríada mayor (1 – 3 – 5):

E: E – G# – B

Este tipo de cálculos deben resultarte obvios. Si aún no lo son, busca la serie de construcción de acordes, que te dará una base teórica suficiente para entender todo esto.

Además de conocer las notas absolutas que componen el acorde, tanto en la fórmula (E – G# – B), como en la disposición particular (E – B – E – G# – B – E), también es interesante aprender los grados relativos a la fundamental. En el acorde del gráfico:

1 – 5 – 1 – 3 – 5 – 1

Es decir, conviene que tengas claro dónde encontrar cada fundamental, tercera o quinta. Entender lo que uno está tocando es algo valiosísimo que te enriquecerá como intérprete, arreglista o compositor.

En particular, lo primero que debes aprenderte es la disposición de las fundamentales, característica de la cuarta posición CAGED, o CAGED «E»:

4ª posición CAGED

Por lo general, siempre que un acorde presente esta disposición de fundamentales, independientemente de si es un acorde mayor, menor, séptima, etc., diremos que se encuentra en cuarta posición CAGED.

Ya sabemos hacer un acorde, Mi mayor. Conocemos su composición absoluta y relativa. Lo que haremos a continuación será reciclar este acorde y matar doce pájaros de un tiro: reutilizando la misma posición aprenderemos otros once más.

Toma el acorde de Mi mayor y súbelo entero un semitono (cuando en música decimos subir, haciendo sonidos más agudos, en la guitarra, visualmente, es bajar hacia el puente). Para que se mantenga la misma relación de notas, será necesario que emplees el dedo índice para hacer una cejilla en el primer traste, tal como aparece en la figura:

Es el acorde Fa mayor, F en notación anglosajona, el terror de los principiantes. Si es tu caso, no tires la toalla y persevera, todos hemos pasado por eso. En poco tiempo aprenderás a hacer cejillas y podrás acceder a todo este universo 12 x 1.

Es la misma disposición de notas: 1 – 5 – 1 – 3 – 5 – 1; pero, naturalmente, sus valores concretos son diferentes:

F: F – A – C; en el gráfico: F – C – F – A – C – F

Si subimos un semitono más obtenemos, del mismo modo, Fa sostenido mayor, F#:

Le seguiría, a continuación, Sol mayor, G:

Y así sucesivamente, hasta que, en el traste 12, volveríamos a encontrarnos con Mi mayor, con las mismas notas que en su posición al aire, pero todas una octava más alta:

Naturalmente, si te sientes cómodo haciendo cejillas tan cerca del puente, puedes seguir subiendo: Fa mayor en el traste 13, Fa # mayor en el 14, etcétera.

Imagínate, por ejemplo, que quieres construir Do mayor (C), en cuarta posición CAGED. ¿En qué traste pondremos la cejilla?

Volvamos a la disposición característica de las fundamentales en la cuarta posición:

4ª posición CAGED

Observa, sin ir más lejos, que la fundamental se localiza en la sexta cuerda, la más grave. Localiza la nota Do en esa cuerda y construye a partir de ahí la forma.

Do, en la sexta cuerda, la encontramos en el octavo traste, de modo que el acorde Do mayor es:

Intenta memorizar cuanto antes las notas de la sexta, quinta y cuarta cuerda, pues te facilitarán la tarea de aprender los acordes con cejilla. Debes memorizar todo el mástil, pero comienza por las cuerdas más graves.

Asegúrate de que tienes clara la metodología de reutilización de acordes que hemos descrito hoy. Por lo general, siempre que te encuentres con un acorde que emplee notas al aire y en cuya formación no intervengan más de tres dedos, pregúntate si podrías reciclarlo 12 x 1 usando uno de los dedos como cejilla. No siempre será así; como veremos, hay formas que son complicadas de montar, pero en numerosas ocasiones podrás aprovecharlos, ampliando tu repertorio de acordes a pasos agigantados.

Javier Montero Gabarró


http://elclubdelautodidacta.es/wp/2012/12/guitarra-acorde-mayor-en-cuarta-posicion-caged/


El texto de este artículo se encuentra sometido a una licencia Creative Commons del tipo CC-BY-NC-ND (reconocimiento, no comercial, sin obra derivada, 3.0 unported)


El Club del Autodidacta


Índice de la categoría Guitarra.

Índice de la categoría Armonía.

Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.plugin cookies

ACEPTAR
Aviso de cookies