Python f-string中!r语法作用及对应代码可正常运行原因咨询
问题解答
首先明确结论:!r 是f-string专属的格式化转换修饰符,不需要在变量定义阶段做任何前置声明,仅在f-string格式化的运行阶段生效,所以你的代码可以正常运行。
原理说明
Python的f-string中,花括号内的变量后可以加!开头的转换标记,用来指定该变量插入字符串前的处理规则,常见的标记有3种:
!s:调用变量的__str__()方法输出,是默认的转换规则,输出的是人类易读的字符串形式!r:调用变量的__repr__()方法输出,输出的是对象的官方可复现表示,对字符串类型会自动包裹引号、转义特殊字符!a:调用ascii()方法处理变量后输出,会将非ASCII字符转换为转义序列
对应你的代码示例效果
你给出的代码运行后输出如下:
name = 'Fred' print(f"He said his name is {name}.") # 输出:He said his name is Fred. (name默认走!s转换,无额外引号) print(f"He said his name is {name!r}") # 输出:He said his name is 'Fred'. (name走!r转换,调用repr('Fred'),结果带单引号) My_name_is = 'I said my name is Parker' print(f'what did you say? {My_name_is!r}.') # 输出:what did you say? 'I said my name is Parker'.
所有Python内置对象默认都实现了__repr__()方法,所以无论是什么类型的变量,都可以直接在f-string中使用!r标记,无需提前对变量做特殊定义。
内容的提问来源于stack exchange,提问作者Alg2code
相关产品推荐
相关产品推荐

