Эквивалент python для perl qw()
Я делаю это много в Perl:
printf "%8s %8s %8s\n", qw(date price ret);
Однако, лучшее, что я могу найти в Python,
print '%8s %8s %8s' % (tuple("date price ret".split()))
Мне просто интересно, есть ли более элегантный способ сделать это? Я в порядке, если вы скажете мне, что это и никакое улучшение не может быть сделано.
Ответы
Ответ 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()
).
Благодаря предыдущим ответам на этот подход.