插值字符串格式化代码中的感叹号(Python)

这篇具有很好参考价值的文章主要介绍了插值字符串格式化代码中的感叹号(Python)。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

在csdn上读到,插值字符串格式化代码中有“!”,进行了一番探究,了解到其中的一点“隐秘”,在此共享。🤪


(笔记模板由python脚本于2024年03月31日 09:27:59创建,本篇笔记适合对Python字符串格式化有一定认知的coder翻阅)


【学习的细节是欢悦的历程】

  • Python 官网:https://www.python.org/

  • Free:大咖免费“圣经”教程《 python 完全自学教程》,不仅仅是基础那么简单……
    地址:https://lqpybook.readthedocs.io/


  自学并不是什么神秘的东西,一个人一辈子自学的时间总是比在学校学习的时间长,没有老师的时候总是比有老师的时候多。
            —— 华罗庚


  • My CSDN主页、My HOT博、My Python 学习个人备忘录
  • 好文力荐、 老齐教室
插值字符串格式化代码中的感叹号(Python),笔记,python,学习


插值字符串格式化代码中有“!”
f-string代码中的“!”
(一番探究了解到一点“隐秘”,在此共享)


本文质量分:

97

本文地址: https://blog.csdn.net/m0_57158496/article/details/137244773

CSDN质量分查询入口:http://www.csdn.net/qc


目 录

◆ f-string代码中的“!”


1、代码解析


  我在csdn闲逛时,读到一行插值字符串格式化(f-string)代码中带了感叹号,给整不会了。🧐

代码


f'obj([{self.n!s}])'

  一番探究,却发现“大有乾坤”,是我漏学的知识点,值得“笔记”一下

  !是用于指定格式化选项的关键字, s将所引用对象强制转换为其字符串表达形式。这通常用于确保所作用对象self.n即使是非字符串类型也将会被强制转换为其字符串表示形式。

如:


pi = 3.1415926535
print(f"{pi!s}")

输出:3.1415926535


回页目录


2、!在f-string中的作用


  在 P y t h o n Python Python的格式化字符串字面值(f-strings)中,! 用于指定格式化选项。它后面可以跟一个或多个字符,用于改变值的格式化方式。这些选项可以用来控制数字的显示方式、字符串的引用等。


2.1 通用模式:!a、!r、!s


  • 以下是几个常用的格式化选项
  1. !s - 将值格式化为字符串。这通常用于确保即使是非字符串类型的值也会被强制转换为字符串表示形式。
  2. !r - 将值转换为“官方”字符串表示形式,即使用 repr() 函数。这通常会产生一个可以被Python解释器解析的字符串形式。
  3. !a - 将值转换为“可打印”的ASCII表示形式。这类似于 !r,但是会使用 ascii() 函数,确保所有非ASCII字符都被转换。

例如


class Example:
    def __init__(self, value):
        self.value = value

    def __str__(self):
        return str(self.value)
        
    def __repr__(self):
        return f"{self.value!r}"


obj = Example('梦幻精灵_cq')
print(f"\n!s参数:{obj!s}")  
print(f"!r参数:{obj!r}")  
print(f"!a参数:{obj!a}")  
obj = Example(3.1415926535)
print(f"\n!s参数:{obj!s}")  
print(f"!r参数:{obj!r}")  
print(f"!a参数:{obj!a}")  
obj = Example(True)
print(f"\n!s参数:{obj!s}")  
print(f"!r参数:{obj!r}")  
print(f"!a参数:{obj!a}") 
obj = Example(['梦幻精灵_cq', 6688])
print(f"\n!s参数:{obj!s}")  
print(f"!r参数:{obj!r}")  
print(f"!a参数:{obj!a}") 

  • 代码运行效果截屏图片
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
      由图可鉴,!a参数对Ascii字符返回了它原本样子的 A S C I I ASCII ASCII码形态;对于非Ascii字符则返回了其 U n i c o d e Unicode Unicode编码(十六进制数)

回页目录


2.2 数值类型的专属模式


  除了前面的例子中的任意对象都可使用的!s!r!a 这些基本选项,还可以有对齐和填充字符串格式化操作。数值类型(intfloat)对象,甚至还支持更多的格式化选项,允许你指定精度、宽度、填充字符等。例如:


小数位数(数度)和位宽控制


number = 123.456789
# 指定小数点后两位精度
print(f"The number is {number:.2f}")  # 输出: The number is 123.46
# 指定宽度为8,左对齐
print(f"The number is {number:8}")    # 输出: The number is    123.456789


  在Python的字符串格式化中,你可以通过指定格式说明符来强制类型限定。格式说明符是一个由感叹号或者冒号(!或者:)引入的字符串,它跟随在格式化字段名之后,用于指定强制采用哪种模式格式化该对象。


  • 以下是一些常用的类型限定关键字

    01、 s - 将值转换为字符串形式。
    02、 r - 将值转换为字符串形式,并使用repr()而不是str()
    03、 a - 将值转换为字符串形式,并使用ascii()函数进行ASCII编码。
    04、 b - 将整数转换为二进制表示形式。
    05、 d - 将整数转换为十进制表示形式。
    06、 o - 将整数转换为八进制表示形式。
    07、 x - 将整数转换为十六进制表示形式,其中小写字母用于a-f。
    08、 X - 将整数转换为十六进制表示形式,其中大写字母用于A-F。
    09、 e - 将浮点数转换为科学计数法表示形式,其中小写字母e用于指数部分。
    10、 E - 将浮点数转换为科学计数法表示形式,其中大写字母E用于指数部分。
    11、 f - 将浮点数转换为固定点表示形式。
    12、 F - 将浮点数转换为固定点表示形式,并且如果存在,使用大写字母表示NaN和无穷大。
    13、 g - 自动选择在ef之间更紧凑的表示形式来表示浮点数。
    14、 G - 自动选择在EF之间更紧凑的表示形式来表示浮点数。
    15、 c - 将整数转换为对应的Unicode字符。
    16、 % - 将数值转换为百分比表示形式,相当于乘以100并显示为一个固定点数,后面跟有一个百分号。

下面是16个参数的一些使用示例


obj = input('\n输入:\nobj = ').strip() # 变量obj接收键盘录入字符串。
objs = set(map(str, range(10)))
obj = int(obj) if set(obj).issubset(objs) else float(obj) if set(obj.replace('.', '')) <= objs else int(obj) if set(obj) <= set(range(10)) else obj # 用三元操作语句转换输入字符为相应类型。

print(f"\n{f'{type(obj) = }':^40}\n{'':~^40}\n\n◇ 使用新式字符串格式化:str.format()")
print("!a -> {!a}".format(obj))
print("!r -> {!r}".format(obj))
print("!s -> {!s}".format(obj))

if type(obj) is float or type(obj) is int:
    print("\n:e -> {:e}".format(obj))
    print(":E -> {:E}".format(obj))
    print(":f -> {:f}".format(obj))
    print(":F -> {:F}".format(obj))
    print(":g -> {:g}".format(obj))
    print(":G -> {:G}".format(obj))
    print(":% -> {:%}".format(obj))
    print(":.2% -> {:.2%}".format(obj))
if type(obj) is int:
    print("\n:c -> {:c}".format(obj))
    print(":d -> {:d}".format(obj))
    print(":b -> {:b}".format(obj))
    print(":o -> {:o}".format(obj))
    print(":x -> {:x}".format(obj))
    print(":X -> {:X}".format(obj))


print('\n\n◇ 使用插值字符串格式化:f-string')
print(f"!a -> {obj!a}")
print(f"!r -> {obj!r}")
print(f"!s -> {obj!s}")

if type(obj) is float or type(obj) is int:
    print(f"\n:e -> {obj:e}")
    print(f":E -> {obj:E}")
    print(f":f -> {obj:f}")
    print(f":F -> {obj:F}")
    print(f":g -> {obj:g}")
    print(f":.3G -> {obj:.3G}")
    print(f":% -> {obj:%}")
    print(f":.2% -> {obj:.2%}")

if type(obj) is int:
    print(f"\n:b -> {int(obj):b}")
    print(f":c -> {int(obj):c}")
    print(f":d -> {int(obj):d}")
    print(f":o -> {int(obj):o}")
    print(f":x -> {int(obj):x}")
    print(f":X -> {int(obj):X}")

print('\n\n◇ 使用占位符:%')
print('a -> %a'%obj)
print('r -> %r'%obj)
print('s -> %s'%obj)

if type(obj) is float or type(obj) is int:
    print('\nd -> %d'%obj)
    print('e -> %e'%obj)
    print('E -> %E'%obj)
    print('f -> %f'%obj)
    print('F -> %F'%obj)
    print('.2g -> %.2g'%obj)
    print('.3G -> %.3G'%obj)

if type(obj) is int:
    print('\nc -> %c'%int(obj))
    print('o -> %o'%int(obj))
    print('x -> %x'%int(obj))
    print('X -> %X'%int(obj))


  • 代码运行效果截屏图片

    字符串 s t r str str
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习

    浮点数 f l o a t float float
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习

    整型 i n t int int
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
      如图所鉴:在新式字符格式化和插值字符串格式化,参数的使用除a、 r、s是由!引导外,其它参数都是由:引导的(a, r, s可以对任意对象使用,其余只可以作用于数值型对象,其中b, c, d, o, x, X只能作用于浮点型对象);旧式占位符%字符串格式化,则全部直接紧跟在作用对象后面,(其b%参数不可用,d参数可以直接作用于少浮点型数值对象float,自动截取整数部分,相当于'%d'%int(float))

      python 3.x已不推荐使用%占位方式的旧式字符串格式化,但为了向下兼容代码,python 3.x还是对其提供支持的。虽然不在自己的代码中使用,对其“了解一下”还是必要的,方便对python 2.x相关代码的理解和阅读。

回页目录


2.3 对齐和嵌套模式组合


  在格式化字符串实际操作中,你可以自由地组合这些参数选项来得到你想要的输出格式。这些格式说明符提供了对字符串格式化的精细控制,使得创建格式化的输出变得非常灵活和强大。

(基于现在的 P y t h o n Python Python最推崇f-string,我也是对其极为 l i k e like like,所以这里仅对“插值字符串格式化”举例阐述。如果欲了解“新式字符格式化”和“%占位符字符串格式化”,请点击这里跳转我以前的复习笔记)


  • f-string对齐操作
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
    字符填充
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
    不同行宽设定
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习

      我没有找到数值对象的模式控制和对齐操作同时共存的用法,但两层f-string嵌套可以完美实现,代码语义也是易读易懂。如:

    代码
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
    int整型
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
    float浮点型
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习

Python代码


while 1:
    obj = input('\n输入:\nobj = ').strip() # 变量obj接收键盘录入字符串。
    if obj:
        break # 有输入才继续,无输入循环。

objs = set(map(str, range(10)))
obj = int(obj) if set(obj).issubset(objs) else float(obj) if set(obj.replace('.', '')) <= objs else int(obj) if set(obj) <= set(range(10)) else obj # 用三元操作语句转换输入字符为相应类型。

print(f"\n\n◇ 使用插值字符串格式化:f-string\n{f' 在40的宽度中对齐 ':=^33}\n")
print(f":^40 居中,:<40 靠左 :>40 靠右\n{obj:^40}\n{obj:<40}\n{obj:>40}")
print(f"\n:~^40 “~”即是填充字符位,默认空格,后两行填充字符为“.”、“,”。\n{obj:~^40}\n{obj:.<40}\n{obj:,>40}")
print(f"\n参数末的数字,即是设定格式化字符行宽:\n:~^20 20宽度居中。\n{obj:~^20}\n:~<30 30宽度靠左\n{obj:~<30}\n:~>18 18宽度靠右\n{obj:~>18}\n{'清晰行占用宽度,用“~”字符填充':.^27}")

if type(obj) is float or type(obj) is int:
    print(f'\n\n{"插值字符串嵌套对齐":=^30}\n{f":e -> {obj:e}":^40}')
    print(f'{f":E -> {obj:E}":*>40}')
    print(f'{f":f -> {obj:f}":^>33}')
    print(f'{f":F -> {obj:F}":#<21}')
    print(f"{f':g -> {obj:g}':a>24}")
    print(f"{f':.3G -> {obj:.3G}':^40}")
    print(f"{f':% -> {obj:%}':^19}")
    print(f"{f':.2% -> {obj:.2%}':^40}")

if type(obj) is int:
    print(f"\n{f':b -> {int(obj):b}':>36}")
    print(f"{f':c -> {int(obj):c}':.^22}")
    print(f"{f':d -> {int(obj):d}':@^33}")
    print(f"{f':o -> {int(obj):o}':o<12}")
    print(f"{f':x -> {int(obj):x}':x<16}")
    print(f"{f':X -> {int(obj):X}':X^24}")


注意

  如果对齐中有中文字符,代码中的宽度设定数值,是实际行宽数值-中文字符数。原因是, P y t h o n Python Python计算中文字符是按实际个数,而中文字符的显示却是占用两个英文字符位。f-string中的行宽数值是指的半角英文字符宽度。

  • 没考虑中文的f-string对齐操作
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
      由图可鉴,设定的对齐,被四个中文字符挤乱了。😁😁

  • 中文对齐优化代码:print(f"\n{'':~^40}\n\n{' 梦幻精灵_cq ':.^36}\n\n{'':~^40}")

    输出:
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
      减去四个中文字符,用 36 36 36限定行宽,就消除了四个中文字符的捣乱行为。😀

  关于字符串的对齐还有其自带的方法:str.center(), str.ljust(), str.rjust()。您可以点击这里查看我以前的学习笔记。


回页目录


3、总结


  在Python 3.x中,推荐使用str.format()方法和f-string( P y t h o n Python Python 3.6+)进行字符串格式化,这些方法提供了更加强大和灵活的格式化能力。

  字符串格式化,f-strings是最快的方式,并且极具灵活性和易读性,通常是首选的字符串格式化方法。对于 P y t h o n Python Python 3.5及以下版本,str.format()是更好的选择,而旧式%占位符字符串格式化一般不再推荐使用,虽然Python依旧支持,除非兼容python 2.x

  需要注意的是,在Python的新式字符串格式化方法中,!并不是必须的,不加任何参数的缺省效果就是!s!r倒是与!s没啥出入,!a倒是比较巧妙,有时候比ascii()方便。

  我个人是更喜欢 P y t h o n 3.6 Python 3.6 Python3.6极为推崇的插值字符串格式f-string,她几乎就是自然语言,易读易写,撰写代码非常舒适。😋


回页目录


4、我关于“字符串格式化”的笔记和练习


  • numpy和字符串格式化,用*画田字形状

  • str.replace()——Python的“第四”字符串格式

  • 复习:python中的字符串格式化

  • 插值字符串格式化定制程序结果输出(f‘{object}‘)

  • “文本界面”(Python插值字符串格式化打造)


回页首


上一篇:  代码行数的控制(Python)(同一段功能代码的行数,本应相对固定;但在灵活的Python中,她却是“变幻莫测”的)
下一篇: 

我的HOT博:

  本次共计收集 311 篇博文笔记信息,总阅读量43.82w。数据于2024年03月22日 00:50:22完成采集,用时6分2.71秒。阅读量不小于6.00k的有 7 7 7篇。

  • 001
    标题:让QQ群昵称色变的神奇代码
    (浏览阅读 5.9w )
    地址:https://blog.csdn.net/m0_57158496/article/details/122566500
    点赞:25 收藏:86 评论:17
    摘要:让QQ昵称色变的神奇代码。
    首发:2022-01-18 19:15:08
    最后编辑:2022-01-20 07:56:47

  • 002
    标题:Python列表(list)反序(降序)的7种实现方式
    (浏览阅读 1.1w )
    地址:https://blog.csdn.net/m0_57158496/article/details/128271700
    点赞:8 收藏:35 评论:8
    摘要:Python列表(list)反序(降序)的实现方式:原址反序,list.reverse()、list.sort();遍历,全数组遍历、1/2数组遍历;新生成列表,resersed()、sorted()、负步长切片[::-1]。
    首发:2022-12-11 23:54:15
    最后编辑:2023-03-20 18:13:55

  • 003
    标题:pandas 数据类型之 DataFrame
    (浏览阅读 9.7k )
    地址:https://blog.csdn.net/m0_57158496/article/details/124525814
    点赞:7 收藏:36 
    摘要:pandas 数据类型之 DataFrame_panda dataframe。
    首发:2022-05-01 13:20:17
    最后编辑:2022-05-08 08:46:13

  • 004
    标题:个人信息提取(字符串)
    (浏览阅读 8.2k )
    地址:https://blog.csdn.net/m0_57158496/article/details/124244618
    点赞:2 收藏:15 
    摘要:个人信息提取(字符串)_个人信息提取python。
    首发:2022-04-18 11:07:12
    最后编辑:2022-04-20 13:17:54

  • 005
    标题:Python字符串居中显示
    (浏览阅读 7.6k )
    地址:https://blog.csdn.net/m0_57158496/article/details/122163023
    评论:1

  • 006
    标题:罗马数字转换器|罗马数字生成器
    (浏览阅读 7.5k )
    地址:https://blog.csdn.net/m0_57158496/article/details/122592047
    摘要:罗马数字转换器|生成器。
    首发:2022-01-19 23:26:42
    最后编辑:2022-01-21 18:37:46

  • 007
    标题:回车符、换行符和回车换行符
    (浏览阅读 6.0k )
    地址:https://blog.csdn.net/m0_57158496/article/details/123109488
    点赞:2 收藏:3 
    摘要:回车符、换行符和回车换行符_命令行回车符。
    首发:2022-02-24 13:10:02
    最后编辑:2022-02-25 20:07:40


推荐条件 阅读量突破6.00k
(更多热博,请点击蓝色文字跳转翻阅)

  • 截屏图片
    插值字符串格式化代码中的感叹号(Python),笔记,python,学习
      (此文涉及ChatPT,曾被csdn多次下架,前几日又因新发笔记被误杀而落马。躺“未过审”还不如回收站,回收站还不如永久不见。😪值此年底清扫,果断移除。留此截图,以识“曾经”。2023-12-31)

回页首


插值字符串格式化代码中的感叹号(Python),笔记,python,学习

精品文章:

  • 好文力荐:齐伟书稿 《python 完全自学教程》 Free连载(已完稿并集结成书,还有PDF版本百度网盘永久分享,点击跳转免费🆓下载。)
  • OPP三大特性:封装中的property
  • 通过内置对象理解python'
  • 正则表达式
  • python中“*”的作用
  • Python 完全自学手册
  • 海象运算符
  • Python中的 `!=`与`is not`不同
  • 学习编程的正确方法

来源:老齐教室


◆ Python 入门指南【Python 3.6.3】


好文力荐:

  • 全栈领域优质创作者——[寒佬](还是国内某高校学生)博文“非技术文—关于英语和如何正确的提问”,“英语”和“会提问”是编程学习的两大利器。
  • 【8大编程语言的适用领域】先别着急选语言学编程,先看它们能干嘛
  • 靠谱程序员的好习惯
  • 大佬帅地的优质好文“函数功能、结束条件、函数等价式”三大要素让您认清递归

CSDN实用技巧博文:文章来源地址https://www.toymoban.com/news/detail-850088.html

  • 8个好用到爆的Python实用技巧
  • python忽略警告
  • Python代码编写规范
  • Python的docstring规范(说明文档的规范写法)

到了这里,关于插值字符串格式化代码中的感叹号(Python)的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • 第33讲:Python格式化字符串时使用字典传递字符串

    在前面对字符串进行格式化输出时,传递被格式化的字符串时都是单个的,如果想要对字典中Key对应的Value进行格式化输出,常规的方法如下:

    2023年04月24日
    浏览(52)
  • 格式化字符串你都懂了吗

    今天跟大家聊聊字 符串的格式化 这部分内容。乍一听“ 格式化 ”这三个字,有的初学者可能会懵:难道这是要清空字符串的节奏? 其实不是的,恰恰相反,格式化字符串是为了让字符串变的更美观、更灵活。接下来就给大家详细介绍格式化字符串的概念以及具体用法。 格

    2024年02月04日
    浏览(51)
  • 浅谈非栈上格式化字符串

    这里先浅分析修改返回地址的两种打法,分别是\\\"诸葛连弩\\\"和”四马分肥“ 本文例题 以陕西省赛easy_printf为主 简单看一看程序 需要先过一个判断然后进入vuln 进入后 有一个13次的循环 可以让我们操作 第一步 肯定要先leak出栈地址 程序基地址和libc基地址 第二步 修改ret地址

    2024年02月14日
    浏览(50)
  • Python字符串格式化 (%操作符)

    在许多编程语言中都包含有格式化字符串的功能,比如C和Fortran语言中的格式化输入输出。在Python中内置有对字符串进行格式化的操作符是\\\"%\\\"。 模板 格式化字符串时,Python使用一个字符串作为模板。模板中有格式符,这些格式符为真实值预留位置,并说明真实数值应该呈现的

    2024年02月14日
    浏览(47)
  • Python 用户输入和字符串格式化指南

    Python 允许用户输入数据。这意味着我们可以向用户询问输入。在 Python 3.6 中,使用 input() 方法来获取用户输入。在 Python 2.7 中,使用 raw_input() 方法来获取用户输入。以下示例要求用户输入用户名,并在输入用户名后将其打印在屏幕上: Python 3.6: Python 2.7: 为了确保字符串按预

    2024年02月05日
    浏览(77)
  • 格式化字符串走过的坑 pwn109

    格式化字符串走过的坑 pwn109 今天做的一道题有一个坑我调试半天终于打通了,格式化字符串的坑,确实不少,东西也比较多容易忘记,怎么说呢,功夫在平时,经验少了 老规矩先看一下保护 Full RELRO意味着got不能修改也就是不能通过格式化字符串漏洞来改got表,但是nx保护关

    2024年04月08日
    浏览(59)
  • 【Python入门篇】——Python基础语法(字符串格式化,表达式格式化和数据输入)

    作者简介: 辭七七,目前大一,正在学习C/C++,Java,Python等 作者主页: 七七的个人主页 文章收录专栏: Python入门,本专栏主要内容为Python的基础语法,Python中的选择循环语句,Python函数,Python的数据容器等。 欢迎大家点赞 👍 收藏 ⭐ 加关注哦!💖💖 目前通过%符号占位

    2024年02月05日
    浏览(56)
  • Java工具类——json字符串格式化处理

    在我们拿到一团未经格式化的json字符串时,非常不方便查看,比如这样 因此随手写了个工具类用来格式化json。注意,原json字符串必须语法无误,并且不包含换行、空格、缩进等,否则会保留下来。 ok废话不多说上代码 运行后效果

    2024年01月17日
    浏览(50)
  • Godot 4 源码分析 - 增加格式化字符串功能

    Godot 4的主要字符串类型为String,已经设计得比较完善了,但有一个问题,格式化这块没怎么考虑。 String中有一个format函数,但这个函数只有两个参数,这咋用? 查找使用例子,都是这种效果 一看就懵。哪里有之前用的带%s %d...之类的格式化用得舒服。 动手实现一个 提供s

    2024年02月14日
    浏览(44)
  • 9.Python从入门到精通—Python 字符串格式化,三引号,Unicode 字符串

    Python中的字符串格式化是指将一个字符串中的占位符替换为指定的值。Python中有多种字符串格式化的方法,以下是其中的几种常见方法: 使用百分号(%)进行字符串格式化 使用百分号(%)进行字符串格式化是Python中最早的字符串格式化方法。它的基本语法如下: 其中,格

    2024年03月20日
    浏览(57)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包