python中实现类f-string的方法是怎样的

发布时间:2021-11-12 16:45:29 作者:柒染
来源:亿速云 阅读:153

python中实现类f-string的方法是怎样的,针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。

1. python中如何格式化字符串

python格式化化字符串有3种方法,分别是使用%,format, f-string, 从使用的便利性上讲,是逐个提高的,尤其是f-string,大大简化了字符串格式化代码的编写,下面的示例,是分别使用三种方式进行字符串格式化的操作示例

print("%s今年%d岁" % (name, age))
name = '李雷'
age = 14
print('{name}今年{age}岁'.format(name=name, age=age))
print(f'{name}今年{age}岁')

他们的格式化效果相同,最终结果都是

李雷今年14岁

使用f-string这种语法,显然代码更加简洁,这激发了我的兴趣,试一试,能否实现一个函数实现和f-string类似的效果。

我定义一个函数,并希望它能实现和f-string类似的效果

name = '李雷'
age = 14

def my_fstring(format_str):
   pass

string = my_fstring('{name}今年{age}岁')
print(string)   # 李雷今年14岁

2. 获得需要填充格式化的字段名称

想要实现上述的效果,首先,需要解析字符串,这里我使用正则表达式

import re

pattern = re.compile("{.*?}")

string = "{name}今年{age}岁"
result = pattern.findall(string)   # ['{name}', '{age}']
args = [item[1:-1] for item in result]  # ['name', 'age']

使用正则匹配,解析出字符串里有name和age需要被替换填充。

3. 获得name与age的值

尽管已经知道字符串在格式化时需要替换填充name和age,但怎么获取到这两个字段对应的值呢?这里我想到的方法是获取调用执行函数my_fstring时的frame, 通过frame的f_locals 来获得name与age

def my_fstring(format_str):
   pattern = re.compile("{.*?}")
   result = pattern.findall(format_str)  # ['{name}', '{age}']
   args = [item[1:-1] for item in result]

   frame = sys._getframe()
   f_back_frame = frame.f_back
   value_dict = {key: f_back_frame.f_locals.get(key) for key in args}
   return format_str.format(**value_dict)

在函数内部,通过sys模块,先获得当前的frame,随后通过f_back获得上一层的frame,上一层的frame里的f_locals属性就包含了name和age变量。最后,使用字符串的format方法对字符串进行格式化。

实现的my_fstring函数,还存在很多缺陷,不能代替,也没有必要代替f-string, 但这一次的研究过程,让我对python的函数调用有了更深入的理解和学习。

关于python中实现类f-string的方法是怎样的问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注亿速云行业资讯频道了解更多相关知识。

推荐阅读:
  1. Python实现类似Excel中vlookup函数的方法
  2. Python怎么实现类的封装

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

f-string python

上一篇:为什么要重写hashCode和equals方法

下一篇:Django中的unittest应用是什么

相关阅读

您好,登录后才能下订单哦!

密码登录
登录注册
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》