На мовах Perl я можу інтерполювати в подвійних цитатах:
Perl:
#!/bin/env perl
use strict;
use warnings;
my $job = "foo";
my $cpus = 3;
my $heredoc = <<"END";
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Rakudo Perl 6:
#!/bin/env perl6
my $job = "foo";
my $cpus = 3;
my $heredoc = qq:to/END/;
#SBATCH job $job
#SBATCH cpus-per-task $cpus
END
print $heredoc;
Як зробити щось подібне в Python? У пошуках "інтерполяції рядків у Python", я зіткнувся з інформацією про f-рядки Python, які полегшують інтерполяцію рядків (для Python 3.6 і пізніших версій).
Python 3.6+ з f-рядками:
#!/bin/env python3
job = "foo"
cpus = 3
print(f"#SBATCH job {job}")
print(f"#SBATCH cpus-per-task {cpus}")
Всі три вищезазначені продукти дають однаковий результат:
#SBATCH job cutadapt #SBATCH cpus-per-task 3
Це "все добре і все, але я все ще дійсно зацікавлений в інтерполяції в heredocs використовуючи Python.
Відповіді:
6 за відповідь № 1Те, що більшість людей називають "heredocs", називають "рядками з трьома цитатами" в Python. Вам просто потрібно створити a f-рядок з трьома цитатами:
#!/bin/env python3
cpus = 3
job = "foo"
print(f"""
#SBATCH job {job}
#SBATCH cpus-per-task {cpus}""")
Проте, як ви раніше зазначали, це специфічно для Python 3.6 і пізніших версій.
Якщо ви хочете зробити більше, ніж просто інтерполювати змінні, f-рядки також забезпечують оцінку коду в фігурних дужках:
#!/bin/env python3
print(f"5+7 = {5 + 7}")
5+7 = 12
Це дуже схоже на подвійні рядки в коді Perl 6:
#!/bin/env perl6
put "5+7 = {5 + 7}";
5+7 = 12
4 для відповіді № 2
Для запису інші параметри форматування рядків у Python також працюють для рядкових рядків, що цитуються в три рядки:
a = 42
b = 23
s1 = """
some {} foo
with {}
""".format(a, b)
print(s1)
s2 = """
some %s foo
with %s
""" % (a, b)
print(s2)