Python/Tipos de datos nativos/Declaración de variables
Ahora que ya sabe algo sobre diccionarios, tuplas y listas (¡oh dios mío!), volvamos al programa de ejemplo del Capítulo 2, odbchelper.py.
Python tiene variables locales y globales como casi todo el resto de lenguajes, pero no tiene declaración explícita de variables. Las variables cobran existencia al asignársele un valor, y se destruyen automáticamente al salir de su ámbito.
Ejemplo. Definición de la variable myParams
if __name__ == "__main__":
myParams = {"server":"mpilgrim", \
"database":"master", \
"uid":"sa", \
"pwd":"secret" \
}
Advierta el sangrado. Una sentencia if es un bloque de código que necesita ser sangrado igual que una función.
Observe también que la asignación de la variable es una orden en varias líneas, donde la barra inversa ("\") sirve como marcador de continuación de línea.
- Nota: Cuando una orden se divide en varias líneas con la marca de continuación de línea ("\"), las siguientes líneas se pueden sangrar de cualquier manera; el habitual sangrado astringente de Python no se aplica aquí. Si su IDE de Python autosangra la línea a continuación, probablemente debería aceptar este comportamiento a menos que tenga una imperiosa razón para no hacerlo.
Estrictamente hablando, las expresiones entre paréntesis, corchetes y llaves (como la definición de un diccionario) también pueden ocupar varias líneas con o sin el carácter de continuación ("\"). Me gustaría incluir la barra inversa aunque no haga falta debido a que pienso que hace el código más sencillo de leer, pero esto es cuestión de estilo.
Tercero, nunca llegamos a declarar la variable myParams, simplemente le asignamos un valor. Esto es como en VBScript sin la opción option explicit. Por suerte, al contrario que VBScript, Python no le permite hacer referencia a una variable a la que nunca se asignó un valor; intentar esto lanzará una excepción.
Referencia a variables
[editar]Ejemplo. Referencia a una variable sin asignar
>>> x Traceback (innermost last): File "<interactive input>", line 1, in ? NameError: There is no variable named 'x' >>> x = 1 >>> x 1
Le agradecerá esto a Python algún día.
Asignar varios valores a la vez
[editar]Uno de los atajos más vistosos de Python es el uso de secuencias para asignar múltiples valores a la vez.
Ejemplo. Asignación de múltiples valores simultáneamente
>>> v = ('a', 'b', 'e') >>> (x, y, z) = v [1] >>> x 'a' >>> y 'b' >>> z 'e'
- [1] v es una tupla de tres elementos, y (x, y, z) es una tupla de tres variables. Asignar una a la otra provoca que cada uno de los valores de v se asigne a las variables correspondientes, en orden.
Esto tiene todo tipo de usos. A menudo quiero asignar nombres a un rango de valores. En C usaríamos enum y listaríamos de forma manual cada constante y sus valores asociados, lo que parece especialmente tedioso cuando los valores son consecutivos. En Python podemos usar la función incorporada range con la asignación a múltiples variables para asignar valores consecutivos rápidamente.
Ejemplo. Asignación de valores consecutivos
>>> range(7) [1] [0, 1, 2, 3, 4, 5, 6] >>> (LUNES, MARTES, MIERCOLES, JUEVES, VIENRES, SABADO, DOMINGO) = range(7) [2] >>> LUNES [3] 0 >>> MARTES 1 >>> DOMINGO 6
- [1] La función incorporada range devuelve una lista de enteros. En su forma más sencilla, toma un límite superior y devuelve una lista que empieza en cero hasta el límite superior, sin incluirlo. (Si lo desea, puede pasar otros para especificar una base diferente de 0 y un paso diferente a 1. Puede hacer print range.__doc__ si quiere más detalles.)
- [2] LUNES, MARTES, MIERCOLES, JUEVES, VIERNES, SABADO, y DOMINGO son las variables que estamos definiendo. (Este ejemplo viene del módulo calendar un módulo pequeño y simpático que imprime calendarios, como el programa cal de UNIX. El módulo de calendario define constantes enteras para los días de la semana).
- [3] Ahora cada variable tiene su valor: LUNES es 0, MARTES es 1, etc.
También puede usar la asignación multivariable para construir funciones que devuelvan varios valores, simplemente retornando una tupla con todos los valores. Quien llama puede tratar el valor devuelto como una tupla, o asignar los valores a variables individuales. Muchas bibliotecas estándar de Python hacen esto, incluido el módulo os, que comentaremos en el Capítulo 6.
Lecturas complementarias sobre variables
[editar]- La Referencia del lenguaje Python muestra ejemplos de cuándo puede pasar sin el carácter de continuación de línea y cuándo necesita usarlo.
- How to Think Like a Computer Scientist le muestra cómo usar la asignación multivariable para intercambiar los valores de dos variables.