如何在Python heredocs中实现变量插值?
在Python中实现类似Perl/Raku的Heredoc变量插值
这个问题问得好!在Python里,你可以用几种实用的方式来实现类似Perl/Raku中双引号heredoc的变量插值功能,我给你逐个说明:
方法1:f-string(Python 3.6+,推荐)
这是最直观且简洁的方式,Python的f-string天生支持多行文本(用三重双引号包裹)和变量插值,逻辑和你熟悉的Perl双引号heredoc几乎一致:
job = 'foo' cpus = 3 heredoc = f""" #SBATCH job {job} #SBATCH cpus-per-task {cpus} """ print(heredoc)
只需要在三重双引号前加上f前缀,然后在字符串里用{变量名}的形式插入变量即可。如果不想输出开头的空行,也可以把第一行内容和三重引号写在一起:
heredoc = f"""#SBATCH job {job} #SBATCH cpus-per-task {cpus} """
方法2:str.format()(兼容旧版本Python)
如果你的项目需要兼容Python 3.5及更早版本,或者需要更灵活的格式化逻辑,可以使用字符串的format()方法:
job = 'foo' cpus = 3 heredoc = """ #SBATCH job {job} #SBATCH cpus-per-task {cpus} """.format(job=job, cpus=cpus) print(heredoc)
这里先定义好带占位符{变量名}的多行字符串,再通过format()方法传入对应的变量值完成插值。
方法3:string.Template(贴近Perl/Raku的$变量语法)
如果你想要完全贴近Perl/Raku里$变量的写法,可以使用string模块的Template类:
from string import Template job = 'foo' cpus = 3 heredoc = Template(""" #SBATCH job $job #SBATCH cpus-per-task $cpus """).substitute(job=job, cpus=cpus) print(heredoc)
这种方式直接用$变量名作为占位符,和你示例中的Perl/Raku代码写法几乎一模一样,只需要提前导入Template类即可。
内容的提问来源于stack exchange,提问作者Christopher Bottoms
相关产品推荐
相关产品推荐

