Python 的 f-strings 作用远超你的预期

发表于:2022-2-17 09:33

字体: | 上一篇 | 下一篇 | 我要投稿

 作者:佚名    来源:Python开发者

  学过 Python 的朋友应该都知道 f-strings 是用来非常方便的格式化输出的,觉得它的使用方法无外乎就是 print(f'value = { value }',其实,f-strings 远超你的预期,今天来梳理一下它还能做那些很酷的事情。
  1、懒得再敲一遍变量名
  str_value = "hello,python coders"  
  print(f"{ str_value = }")  
  # str_value = 'hello,python coders'

  2、直接改变输出结果
  num_value = 123  
  print(f"{num_value % 2 = }")  
  # num_value % 2 = 1

  3、直接格式化日期  
  import datetime  
  today = datetime.date.today()  
  print(f"{today: %Y%m%d}")  
  # 20211019  
  print(f"{today =: %Y%m%d}")
  # today = 20211019

  4、2/8/16 进制输出真的太简单
  >>> a = 42  
  >>> f"{a:b}" # 2进制  
  '101010'  
  >>> f"{a:o}" # 8进制  
  '52'  
  >>> f"{a:x}" # 16进制,小写字母  
  '2a'  
  >>> f"{a:X}" # 16进制,大写字母  
  '2A'  
  >>> f"{a:c}" # ascii 码  
  '*'

  5、格式化浮点数
  >>> num_value = 123.456  
  >>> f'{num_value = :.2f}' #保留 2 位小数  
  'num_value = 123.46'  
  >>> nested_format = ".2f" #可以作为变量  
  >>> print(f'{num_value:{nested_format}}')  
  123.46

  6、字符串对齐,so easy!
  >>> x = 'test'  
  >>> f'{x:>10}'   # 右对齐,左边补空格  
  '      test'  
  >>> f'{x:*<10}'  # 左对齐,右边补*  
  'test******'  
  >>> f'{x:=^10}'  # 居中,左右补=  
  '===test==='  
  >>> x, n = 'test', 10  
  >>> f'{x:~^{n}}' # 可以传入变量 n  
  '~~~test~~~'  
  >>>

  7、使用 !s,!r
  >>> x = '中'  
  >>> f"{x!s}" # 相当于 str(x)  
  '中'  
  >>> f"{x!r}" # 相当于 repr(x)  
  "'中'"

  8、自定义格式
  class MyClass:  
      def __format__(self, format_spec) -> str:  
          print(f'MyClass __format__ called with {format_spec=!r}')  
          return "MyClass()"  
  print(f'{MyClass():bala bala  %%MYFORMAT%%}')

  输出如下:
  MyClass __format__ called with format_spec='bala bala  %%MYFORMAT%%'  
  MyClass()

  最后
  Python 的 f-string 非常灵活优雅,同时还是效率最高的字符串拼接方式:
  以后关于字符串的格式化,就 f-string 了。

  本文内容不用于商业目的,如涉及知识产权问题,请权利人联系51Testing小编(021-64471599-8017),我们将立即处理
《2023软件测试行业现状调查报告》独家发布~

关注51Testing

联系我们

快捷面板 站点地图 联系我们 广告服务 关于我们 站长统计 发展历程

法律顾问:上海兰迪律师事务所 项棋律师
版权所有 上海博为峰软件技术股份有限公司 Copyright©51testing.com 2003-2024
投诉及意见反馈:webmaster@51testing.com; 业务联系:service@51testing.com 021-64471599-8017

沪ICP备05003035号

沪公网安备 31010102002173号