mak*_*aki 2 python-3.x f-string
有没有一种方法可以动态更改/替换 f 字符串变量之一?假设我的格式如下:
expected = f'{var} {self.some_evaluation_1(var)} {self.some_evaluation_2(var)}'
Run Code Online (Sandbox Code Playgroud)
然后我有带有多个断言的测试用例:
var1='some value 1'
var2='some value 2'
var3='some value 3'
var=var1
self.assertEqual('some great value1', expected)
var=var2
self.assertEqual('some great value2', expected)
var=var3
self.assertEqual('some great value3', expected)
Run Code Online (Sandbox Code Playgroud)
有没有办法让 f-string 使用我的变量而不是以初始格式定义?
# Let's say something like this? It's just a concept I know it doesn't work.
self.assertEqual('some great value1', expected % var1)
Run Code Online (Sandbox Code Playgroud)
不,f 字符串表达式的结果是不可变的字符串。如同:
y = 'abc'
x = y + 'def' # result of expression is immutable string.
y = 'ghi'
print(x) # would you expect 'ghidef'? No...
Run Code Online (Sandbox Code Playgroud)
如果您希望更改它,请使用format而不是 f-strings 来重新评估expected:
expected = 'test{}' # NOT an f-string
var = 1
assert expected.format(var) == 'test1'
var = 2
assert expected.format(var) == 'test2'
Run Code Online (Sandbox Code Playgroud)
如果您已命名变量(如示例所示),则可以使用:
expected = 'test{var}'
assert expected.format(var=1) == 'test1'
Run Code Online (Sandbox Code Playgroud)
或locals()使用关键字扩展 (**) 作为参数字典传递:
expected = 'test{a}{b}'
a = 1
b = 2
assert expected.format(**locals()) == 'test12'
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
3084 次 |
| 最近记录: |