You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

如何使用f-string为从其他模块导入的字符串传递参数?

问题描述

我有个settings.py文件,内容如下:

a_string='This string should contain {value} <<< here.'

接着在另一个.py文件里导入了这个模块,写了个mystring函数,但跑出来的结果完全不是我想要的:

import settings
def mystring(value='100'):
    b_string=f'{settings.a_string}'
    return b_string
print(mystring())

我本来期望输出是:"This string should contain 100 <<< here."

试过在settings.py里把字符串写成a_string="f'This string should contain {value} <<< here.'",没用;在函数里或者调用时折腾也不管用,总感觉漏了个很明显的点,求大佬指点!

问题分析&解决方案

哈哈,这个坑我刚学Python的时候也踩过!你现在的写法里,f'{settings.a_string}'其实只是把settings.a_string这个字符串原封不动地“套”了个f-string的壳,根本没去解析里面的{value}占位符。给你几个简单可行的解决办法:

方案1:用字符串的format()方法(最推荐)

这个是最直接也最安全的方式,settings.py不用改,还是原来的带占位符的普通字符串就行,在函数里调用format()传入参数就好:

import settings
def mystring(value='100'):
    # 用format把value替换进去
    b_string = settings.a_string.format(value=value)
    return b_string
print(mystring())  # 输出:This string should contain 100 <<< here.

方案2:动态生成f-string

如果你执念于想用f-string的思路,可以把settings.py里的内容改成一个模板字符串,然后在函数里动态解析它:

  • 先改settings.py:
a_string_template = 'This string should contain {value} <<< here.'
  • 然后在函数里用eval()来生成f-string:
import settings
def mystring(value='100'):
    # 把模板和变量结合成f-string再解析
    b_string = eval(f"f'{settings.a_string_template}'")
    return b_string
print(mystring())

⚠️ 注意:eval()会执行字符串里的代码,如果这个模板字符串是来自不可信的外部,会有安全风险,自己用的话没问题。

方案3:用string.Template类(最安全)

要是你担心eval的安全问题,Python标准库的string.Template是个更好的选择,只是要改一下占位符的格式:

  • 修改settings.py:
from string import Template
a_string_template = Template('This string should contain $value <<< here.')
  • 函数里这么写:
import settings
def mystring(value='100'):
    b_string = settings.a_string_template.substitute(value=value)
    return b_string
print(mystring())

这种方式专门用来处理模板替换,完全没有代码执行的风险,适合处理可能来自外部的模板内容。

内容的提问来源于stack exchange,提问作者0buz

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.05.06 16:47:39