Chr*_*oms 2 python heredoc string-interpolation
在Perl语言中,我可以用双引号heredocs进行插值:
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;
Run Code Online (Sandbox Code Playgroud)
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;
Run Code Online (Sandbox Code Playgroud)
我如何在Python中做类似的事情?在搜索"heredoc字符串插值Python"时,我确实遇到了有关Python f字符串的信息,这有助于字符串插值(适用于Python 3.6及更高版本).
带有f-strings的Python 3.6+:
#!/bin/env python3
job = 'foo'
cpus = 3
print(f"#SBATCH job {job}")
print(f"#SBATCH cpus-per-task {cpus}")
Run Code Online (Sandbox Code Playgroud)
以上所有三个都产生完全相同的输出:
Run Code Online (Sandbox Code Playgroud)#SBATCH job cutadapt #SBATCH cpus-per-task 3
这一切都很好,但是我仍然对使用Python的heredocs插值感兴趣.
大多数人称之为"heredocs"的东西在Python中称为"三重引用字符串".您只需要创建一个三引号f字符串:
#!/bin/env python3
cpus = 3
job = 'foo'
print(f'''\
#SBATCH job {job}
#SBATCH cpus-per-task {cpus}''')
Run Code Online (Sandbox Code Playgroud)
但是,如前所述,这是Python 3.6及更高版本所特有的.
如果你想做的不仅仅是内插变量,f-strings还提供花括号内代码的评估:
#!/bin/env python3
print(f'5+7 = {5 + 7}')
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)5+7 = 12
这与Perl 6中的双引号字符串非常相似:
#!/bin/env perl6
put "5+7 = {5 + 7}";
Run Code Online (Sandbox Code Playgroud)
Run Code Online (Sandbox Code Playgroud)5+7 = 12
仅作记录,Python中的其他字符串格式设置选项也适用于多行三重引用的字符串:
a = 42
b = 23
s1 = """
some {} foo
with {}
""".format(a, b)
print(s1)
s2 = """
some %s foo
with %s
""" % (a, b)
print(s2)
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1002 次 |
| 最近记录: |