Mejorar este código - 2a parte

eber_ramirez en ltv.org.mx eber_ramirez en ltv.org.mx
Mar Jun 3 00:04:08 CEST 2008


> encontré particularmente complicado el simplificar esta porción del 
código.

FR=float(self.FR_t.get())
b=float(self.b_t.get())
d=float(self.d_t.get())
fc=float(self.fc_t.get())
fy=float(self.fy_t.get())
As=float(self.As_t.get())

Hay varias formas de plantear esto... yo agruparía las entries en un 
único objeto, ya sea una clase/struct o un diccionario; te muestro aquí 
como se podría hacer con un diccionario, es lo más simple. Pongamos que 
este diccionario sea "self.entries" y que contiene pares (nombre, 
entry). Podemos obtener los valores de las variables así:

variables = dict((k, float(entry.get())) for (k, entry) in 
self.entries.iteritems())

y luego en los cálculos usarlas tal que así:

variables["fc_t"] * variables["As_t"]

En la solución con clase/struct accederías de forma más elegante:

variables.fc_t * variables.As_t

Ver http://pythonesfaq.k-rolus.net/#index33h3

====================================================
Arnau, estoy tratando de implementar esta última solución que me diste, 
clase/struct, pero tengo un problema con los diccionarios y estoy 
definitivamente atorado.

>>> class Struct:
        def __init__(self, **entries):
            self.__dict__.update(entries)
        
        def __repr__(self):
            args = ['%s=%s' % (k, repr(v)) for (k, v) in vars(self).items()]
            return 'Struct(%s)' % ', '.join(args)


>>> variable = Struct(FR=0.9, b=20.0, d=40.0, fy=4200.0, fc=250.0, As=2.54)
>>> print variable.__dict__
{'FR': 0.90000000000000002, 'b': 20.0, 'd': 40.0, 'fy': 4200.0, 'As': 2.54, 'fc': 250.0}

¡¡¡El orden de las variables que quiero utilizar han cambiado!!!  
Nota que As y fc ahora han intercambiado de posición en el orden.
Esto me genera un problema porque los entries los he metido en un bucle para 
no tener que teclear variable por variable, pero requiero que estén en el orden
que necesito, es decir, el que le di originalmente a Struct.
¿Alguna sugerencia o link adónde acudir? 
Gracias.

Eber


Este correo electrónico y cualquier archivo transmitido con él son confidenciales y son solamente para el uso del individuo o entidad a la que van dirigidos. Si recibió este correo electrónico por error por favor notifique al administrador del sistema. Este mensaje contiene información confidencial y es dirigido a la persona implicada. Si usted no es esa persona no debería diseminar, distribuir o copiar este mensaje de correo electrónico.
This email and any files transmitted with it are confidential and intended solely for the use of the individual or entity to whom they are addressed. If you have received this email in error please notify the system manager. This message contains confidential information and is intended only for the individual named. If you are not the named addressee you should not disseminate, distribute or copy this e-mail.
_______________________________________________
Lista de correo Python-es 
http://listas.aditel.org/listinfo/python-es
FAQ: http://listas.aditel.org/faqpyes





Más información sobre la lista de distribución Python-es