2012-06-01 18 views
12

Estoy escribiendo una función para calcular las fechas del calendario. Al reducir las líneas, he descubierto que no puedo asignar varias variables al mismo rango.Python asignando múltiples variables al mismo valor de lista?

Jan, Mar, May, Jul, Aug, Oct, Dec = range(1,32) 

¿Habría una manera eficiente de asignar estos valores y por qué Python da un ValueError?

+2

¿Hay alguna razón por la que no esté utilizando el módulo de fecha y hora? http://docs.python.org/library/datetime.html – robert

Respuesta

55

Uso

Jan = Mar = May = ... = range(1, 32) 
+38

Estaba tipeando una respuesta justo cuando usted envió la suya, y luego me di cuenta de que no hay forma de dar una mejor respuesta que el inventor de python :-) – jdi

+1

@ tijko: lo permite. Pero el resultado de 'range (x)' está tratando de desempaquetarse en las variables de la izquierda. Esto funciona: 'a, b = 1,2' – jdi

+0

@jdi: Gracias por la respuesta, quise decir por qué no se pueden asignar múltiples variables al mismo rango? – tijko

6

La forma más sencilla de hacer lo que usted describe sería el uso de la sintaxis x=y=z ... = VALUE, donde x, y, z, y cualesquiera otras variables que incluyen todos serán asignados el valor de VALUE.

En su ejemplo, todas las variables separadas por comas en el lado izquierdo del signo igual se asignan a los valores secuenciales de una tupla en el lado derecho. Por lo tanto, se podría hacer algo como esto:

values = (31, 28, 31, 30, 31, 30, 31, 31, 30, 31, 30, 31) 
Jan, Feb, Mar, Apr, May, Jun, Jul, Aug, Sep, Oct, Nov, Dec = values 

En su código, usted tiene 7 valores de la izquierda y 31 a la derecha, por lo que se obtiene un error de rango debido a que la lista de la izquierda es más larga que el número o las variables en el lado izquierdo para que se le asignen los valores. Sé que el código anterior no tiene mucha relevancia para lograr tu objetivo, pero pensé que al menos podría darte una idea de lo que estaba tratando de hacer. : D

+0

Gracias, eso era exactamente lo que me preguntaba y tiene perfecto sentido para mis preguntas de seguimiento. Así que está bien asignar: a, b, c = rango (3) – tijko

Cuestiones relacionadas