Подтвердить что ты не робот

Эквивалент python для perl qw()

Я делаю это много в Perl:

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

Однако, лучшее, что я могу найти в Python,

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

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

4b9b3361

Ответ 1

Ну, определенно нет способа сделать именно то, что вы можете сделать в Perl, потому что Python будет жаловаться на имена переменных undefined и синтаксическую ошибку (возможно, отсутствующую запятую). Но я бы написал это так (в 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   }

Ответ 2

"date price ret".split()

Ответ 3

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()).

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