/ / Як я можу інтерполювати змінні в Python heredocs? - python, heredoc, string-interpolation

Як я можу інтерполювати змінні в python heredocs? - python, heredoc, string-інтерполяція

На мовах 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)