Max*_*nar 9 python python-3.x python-3.6 f-string
在最近的Python 3.6版本中使用新的f字符串时,我注意到以下内容:
我们创建一个foo值为的变量bar:
>>> foo = 'bar'
Run Code Online (Sandbox Code Playgroud)然后,我们声明一个新变量,它是我们的f-string,它应该foo被格式化:
>>> baz = f'Hanging on in {foo}'
Run Code Online (Sandbox Code Playgroud)好的,一切正常,然后我们打电话baz来检查它的价值:
>>> baz
'Hanging on in bar'
Run Code Online (Sandbox Code Playgroud)让我们尝试更改值foo并baz再次调用:
>>> foo = 'spam'
>>> baz
'Hanging on in bar'
Run Code Online (Sandbox Code Playgroud)它不应该是动态的吗?为什么会这样?我认为如果foo改变了值,f-string会更新,但是这没有发生.我不明白这是如何工作的.
Jim*_*ard 13
在f-string已已,当你执行了评估:
>>> baz = f'Hanging on in {foo}'
Run Code Online (Sandbox Code Playgroud)
具体来说,它查找了名称的值,foo并将其替换'bar'为为其找到的值.baz然后在格式化后包含字符串.
f-strings不是恒定的; 意思是,在评估之后,他们内部没有替换字段等待评估.它们会在您执行它们时进行评估,之后,分配的值只是一个普通的字符串:
>>> type(f'hanging on in {foo}')
<class 'str'>
Run Code Online (Sandbox Code Playgroud)
仅供参考,请参见上一节格式化字符串字面量:
[..]虽然其他字符串文字总是具有常量值,但格式化字符串实际上是在运行时计算的表达式.[..]
在执行表达式(替换字段的查找及其后续格式化)之后,对它们没有什么特别之处,表达式已经被计算为字符串并被分配给baz.
| 归档时间: |
|
| 查看次数: |
527 次 |
| 最近记录: |