veo a alguien más ya ha señalado a mi viejo "asigno y ajuste" receta de libro de cocina, que se reduce en su versión más sencilla de:
class Holder(object):
def set(self, value):
self.value = value
return value
def get(self):
return self.value
h = Holder()
...
if h.set(isBig(y)): return h.get()
Sin embargo, esto fue pensada sobre todo para facilitar la transcripción entre Python y idiomas en los que la asignación se admite directamente en if
o while
.Si usted tiene "cientos" de dicho cheque y vuelta en una cascada, es mucho mejor que hacer algo completamente diferente:
hundreds = isBig, isSmall, isJuicy, isBlah, ...
for predicate in hundreds:
result = predicate(y)
if result: return result
o incluso algo así como
return next(x for x in (f(y) for f in hundreds) if x)
si está bien a obtener una excepción StopIteration si se cumple ningún predicado, o
return next((x for x in (f(y) for f in hundreds) if x)), None)
si None
es el valor de retorno adecuada cuando se cumple ningún predicado , Etc.
Casi invariablemente, el uso (o incluso desear ;-) Holder
el truco/idioma no es un "olor de diseño", que sugiere la búsqueda de un enfoque diferente y más Pythonic - el único caso en Holder
es Justified es exactamente el caso especial para el que lo diseñé, es decir, el caso en el que desea mantener correspondencia estrecha entre el código de Python y algo que no es Python (está transcribiendo un algoritmo de referencia en Python y quiere que funcione primero antes de refactorizarlo en una forma más Pythonic, o estás escribiendo Python como un prototipo que se transcribirá en C++, C#, Java, etc., una vez que esté funcionando efectivamente).
¿Por qué quieres un trazador de líneas? Los programas no mejoran porque tienen menos líneas. –
Igual que http://stackoverflow.com/questions/1513436/what-should-i-use-instead-of-assignment-in-an-expression-in-python/1513987#1513987 – PaulMcG
¿Tiene 100 de estos? No estarías escribiendo un analizador sintáctico, ¿verdad? Vea esta lista (http://nedbatchelder.com/text/python-parsers.html) del sitio web de Ned Batchelder. – PaulMcG