2010-08-20 19 views
22

que hacer esto mucho en Perl:pitón equivalente a qw de Perl()

printf "%8s %8s %8s\n", qw(date price ret); 

Sin embargo, lo mejor que puede llegar a en Python es

print '%8s %8s %8s' % (tuple("date price ret".split())) 

me pregunto si hay una manera más elegante de hacerlo? Estoy bien si me dices que es eso y no se puede mejorar.

+3

¿Por qué es una wiki de la comunidad? Esa "característica" realmente necesita ser eliminada. –

+0

Lo siento, debo haber hecho clic mal en el cuadro wiki. ¿Cómo lo elimino? (No veo esa opción cuando trato de editar.) ¿Qué debería publicarse exactamente en wiki de la comunidad de todos modos? Gracias. – Zhang18

+0

No se puede eliminar, solo considera esto una lección para la próxima vez. La idea detrás de la opción wiki de la comunidad probablemente se explique mejor en http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts –

Respuesta

22

Bueno, definitivamente no hay forma de hacer exactamente lo que puede hacer en Perl, porque Python se quejará de nombres de variables indefinidos y un error de sintaxis (tal vez, coma faltante). Pero lo escribiría como esto (en Python 2.x):

print '%8s %8s %8s' % ('date', 'price', 'ret') 

Si usted está realmente conectado a la sintaxis de Perl, supongo que se podría definir una función qw así:

def qw(s): 
    return tuple(s.split()) 

y luego se podría escribir

print '%8s %8s %8s' % qw('date price ret') 

que es básicamente similar a Perl salvo el par de comillas en el argumento de que qw. Pero dudaría en recomendar eso. Al menos, no lo hagas solo porque echas de menos a Perl: solo te permite negarte que estés trabajando en un nuevo lenguaje de programación ;-) Es como la vieja historia sobre los programadores de Pascal que cambian a C y crean macros

#define BEGIN { 
#define END } 
+7

Para estar seguro, estaba explícitamente tratando de evitar citas de escritura alrededor de cada palabra. La lista de palabras generalmente se ejecuta en el vecindario de 15-20, de ahí la necesidad de qw() en primer lugar. – Zhang18

+1

Bueno, creo que la forma habitual de Python de hacerlo es simplemente absorber y escribir las comillas, después de todo, solo tienes que hacerlo una vez. Pero no creo que haya nada realmente malo con el uso de esta función 'qw'. Puede confundir a cualquiera que lea su código fuente que no esté familiarizado con Perl, pero si puede vivir con eso, continúe adelante. –

+3

"después de todo, solo tiene que hacerlo una vez", excepto que solo tiene que hacerlo una vez, cada vez que tiene que hacerlo. Antes de comenzar a codificar en perl regularmente, nunca me di cuenta de la frecuencia con la que creé arreglos de tokens individuales, o hashes con tokens únicos para las claves (que es otra oportunidad para omitir las comillas en perl). El "qw" no es significativo, es bueno tener una optimización de caso común que le permita eliminar las comillas. – umassthrower

9

.split "ret fecha precio"()

+0

Eso es lo que el OP ya sugirió. No es realmente útil por lo tanto. –

0

QW() a menudo se utiliza para imprimir los encabezados de columna utilizando join() en Perl. Los encabezados de columna en el mundo real a veces son largos, lo que hace que join("\t", qw()) sea muy útil porque es más fácil de leer y ayuda a eliminar errores tipográficos (por ejemplo, "x","y" o "x\ty"). A continuación se muestra un enfoque relacionado en Python en el mundo real:

print("\t".join('''PubChemId Column ESImode Library.mzmed 
     Library.rtmed Metabolite newID Feature.mzmed Feature.rtmed 
     Count ppmDiff rtDiff'''.split())) 

La cadena de triple cita es una cosa extraña, ya que funciona como un comentario. En este contexto, sin embargo, es una cadena y nos libera de tener que preocuparnos por los saltos de línea (como lo haría qw()).

Gracias a las respuestas anteriores para deleitarse con este enfoque.