2010-08-20 12 views
22

to zrobić dużo w Perlu:pyton równoważne qw Perl()

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

Jednak najlepszym mogę wymyślić w Python jest

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

Zastanawiam się tylko, jeśli istnieje bardziej elegancki sposób robienia tego? Nic mi nie jest, jeśli powiesz mi, że to jest to i nie można dokonać żadnej poprawy.

+3

Dlaczego to jest wiki społeczności? Ta "cecha" naprawdę musi zostać usunięta. –

+0

Przepraszam, musiałem błędnie kliknąć pole wiki. Jak mogę go usunąć? (Nie widzę takiej opcji, gdy próbuję edytować.) Co właściwie powinno być opublikowane na wiki społeczności? dzięki. – Zhang18

+0

Nie można go usunąć, potraktuj to jako lekcję na następny raz. Idea opcji wiki społeczności jest najlepiej wyjaśniona na http://meta.stackexchange.com/questions/11740/what-are-community-wiki-posts –

Odpowiedz

22

Cóż, zdecydowanie nie można zrobić dokładnie tego, co można zrobić w Perlu, ponieważ Python będzie narzekał na niezdefiniowane nazwy zmiennych i błąd składni (być może brakujący przecinek). Ale chciałbym napisać to tak (w Python 2.X):

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

Jeśli jesteś naprawdę przywiązany do składni Perl, myślę, że można zdefiniować funkcję qw tak:

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

a następnie można napisać

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

, która jest w zasadzie podobny do Perl z wyjątkiem jednej pary cytaty na argument qw. Ale nie wahałbym się tego zalecać. Przynajmniej nie rób tego tylko dlatego, że tęsknisz za Perlem - to tylko pozwala ci zaprzeczyć, że pracujesz teraz w nowym języku programowania ;-) To jest jak stara historia o programistach Pascala, którzy przełączają się na C i tworzą makra

#define BEGIN { 
#define END } 
+7

Dla pewności, wyraźnie starałem się omijać cytaty przy każdym słowie. Lista słów zwykle przebiega w okolicach 15-20, stąd potrzeba qw() w pierwszej kolejności. – Zhang18

+1

Cóż, wydaje mi się, że zwykłym sposobem w Pythonie jest po prostu podciągnięcie i wpisanie cytatów - w końcu wystarczy zrobić to tylko raz. Ale nie sądzę, że jest coś naprawdę nie tak z używaniem tej funkcji qw. Może to zmylić każdego, kto czyta twój kod źródłowy, który nie zna Perla, ale jeśli możesz z tym żyć, idź przed siebie. –

+3

"w końcu musisz zrobić to tylko raz" - poza tym, że musisz zrobić to tylko raz, za każdym razem, gdy musisz to zrobić. Zanim zacząłem regularnie kodować w Perlu, nigdy nie zdawałem sobie sprawy, jak często tworzyłem tablice pojedynczych tokenów lub haszy z pojedynczymi tokenami dla kluczy (co jest kolejną możliwością pominięcia cytatów w perlu). "Qw" nie jest znaczące, po prostu dobrze jest mieć wspólną optymalizację przypadku, która umożliwia usunięcie cudzysłowów. – umassthrower

9

"data cena ret" .split()

+0

Tak właśnie zaproponował PO. Niezbyt pomocny. –

0

QW() jest często używany do drukowania nagłówków kolumn za pomocą join() w Perlu. Głowice kolumn w świecie rzeczywistym są czasem długie - dzięki czemu są bardzo przydatne, ponieważ łatwiej je odczytać i pomagają wyeliminować literówki (np. "x","y" lub "x\ty"). Poniżej jest powiązany podejście w świecie rzeczywistym Python:

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

Potrójna cytat ciąg jest dziwne, ponieważ może służyć jako komentarz. W tym kontekście jest to jednak ciąg znaków, który uwalnia nas od martwienia się o podziały wierszy (tak, jak by to było w przypadku qw()).

Dzięki poprzednim odpowiedziom za rozkoszowanie się tym podejściem.