Python эквивалентно Perl's QW () - PullRequest
       4

Python эквивалентно Perl's QW ()

26 голосов
/ 21 августа 2010

Я часто делаю это в Perl:

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

Однако лучшее, что я могу придумать в Python, это

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

Мне просто интересно, естьболее элегантный способ сделать это?Я в порядке, если вы скажете мне, что это так, и улучшения не будет.

Ответы [ 3 ]

23 голосов
/ 21 августа 2010

Ну, определенно нет способа сделать именно то, что вы можете сделать в Perl, потому что Python будет жаловаться на неопределенные имена переменных и синтаксическую ошибку (возможно, пропущенная запятая). Но я бы написал так (в Python 2.X):

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

Если вы действительно привязаны к синтаксису Perl, я думаю, вы могли бы определить функцию qw следующим образом:

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

и тогда вы могли бы написать

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

, который в основном является Perl-подобным, за исключением одной пары кавычек в аргументе для qw. Но я не решился бы рекомендовать это. По крайней мере, не делайте этого только потому, что вы скучаете по Perl - это только позволяет вам отрицать, что вы сейчас работаете на новом языке программирования ;-) Это похоже на старую историю про программистов на Pascal, которые переключаются на C и создают макросы

#define BEGIN {
#define END   }
11 голосов
/ 21 августа 2010

"дата цена рет" .split ()

0 голосов
/ 13 ноября 2015

QW() часто используется для печати заголовков столбцов, используя join() в Perl.Головки столбцов в реальном мире иногда бывают длинными, что делает join("\t", qw()) очень полезным, потому что его легче читать и помогает избежать опечаток (например, "x","y" или "x\ty").Ниже приведен похожий подход в реальном Python:

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

Строка тройных кавычек - странная вещь, потому что она удваивается как комментарий.В этом контексте, однако, это строка, и она освобождает нас от необходимости беспокоиться о переносах строк (как qw()).

Благодаря предыдущим ответам за использование этого подхода.

...