首页 > 其他分享 >24 - 格式化字符串

24 - 格式化字符串

时间:2024-02-22 21:35:48浏览次数:278  
标签:24 格式化 string format Python print 字符串

格式化字符串

笔者认为格式化字符串 (formatted string) 在任何语言里都值得单独拿出来做个笔记,因为它是编程中控制输出的重要一环。

Formatted String Literals (f-string)

官网的翻译为 “格式化字符串字面值”。比较常用的格式化方法。

在字符串前加上前缀 fF ,通过 {expression} 替代区域 (replacement field),把需要表达的内容添加到字符串内。

>>>print(f'1 + 1 = {1 + 1}')
1 + 1 = 2
>>>print(f'1 + 1 = {1 + 1:3d}')
1 + 1 =   2
>>>print(f'3 / 2 = {3 / 2:4.1f}')
3 / 2 =  1.5

Python 会计算 替代区域 表达式内的内容,然后插入到原字符串内进行打印。在 替代区域 中可以加入 format specifiers 来格式化插入的方式。

替代区域(replacement field) 的语法格式:

replacement_field ::=  "{" [field_name] [debug] ["!" conversion] [":" format_spec] "}"
field_name        ::=  arg_name ("." attribute_name | "[" element_index "]")*
arg_name          ::=  [identifier | digit+]
attribute_name    ::=  identifier
element_index     ::=  digit+ | index_string
index_string      ::=  <any source character except "]"> +
debug             ::=  "="
conversion        ::=  "r" | "s" | "a"
format_spec       ::=  format-spec:format_spec

(format_spec) 语法格式:

format_spec     ::=  [[fill]align][sign]["z"]["#"]["0"][width][grouping_option]["." precision][type]
fill            ::=  <any character>
align           ::=  "<" | ">" | "=" | "^"
sign            ::=  "+" | "-" | " "
width           ::=  digit+
grouping_option ::=  "_" | ","
precision       ::=  digit+
type            ::=  "b" | "c" | "d" | "e" | "E" | "f" | "F" | "g" | "G" | "n" | "o" | "s" | "x" | "X" | "%"

笔者认为这样的语法格式还是很清晰的。至于具体每个缩写代表,笔者建议直接翻看文档,这里就不直接照抄了。常见的选项见多了就会了,见不到的人不会需要那些内容。

字符串 format() 方法

format() 方法 f-string 很类似,不过它实现了字符串与 替代区域 的拆分。

调用此方法的字符串可以包含字符串字面值或者以花括号 {} 括起来的替换域。

每个替换域可以包含一个位置参数的数字索引,或者一个关键字参数的名称。 返回的字符串副本中每个替换域都会被替换为对应参数的字符串值。

>>>a = "abc{0}{1}"
>>>print(a.format('x', 'y'))
abcxy
>>>print(a.format('cool', 'wa'))
abccoolwa
>>>b = 'yoo{yes}{no}'
>>>b.format(yes='haha', no='nono')
'yoohahanono'

printf 风格格式化

Python 过去使用这种格式化规则,但现在 Python 建议转到 f-string 或 format() 方法。不过笔者仍然看到很多人使用这种方法。

>>>print('%(language)s has %(number)03d quote types.' %
...      {'language': "Python", "number": 2})
Python has 002 quote types.
>>>print('%s has %03d quote types.' %("Python", 2))
Python has 002 quote types.

简单的来说就是

  1. %["("keywords")"][flag][width]["." precision][type] 在字符串中占位,
  2. 然后用 % 运算符将需要的内容带入字符串
    • 如果提供 keywords,则 % 需要跟字典
    • 否则 % 需要跟元组。

手动设置输出格式

笔者这里记录一下除了上述三种格式化方法以外,还可以自己设定输出格式。

笔者才疏学浅,暂时没见过也用不上这种方式,因此不多记录。


ref:
Python docs: Fancier Output Formatting
Python docs: Format Specification Mini-Language
Python docs: python 3.8 - f-string support for self-documenting and debugging
Python docs: str.format()
Python docs: printf-style string formatting

标签:24,格式化,string,format,Python,print,字符串
From: https://www.cnblogs.com/wanderoff-night/p/18020653

相关文章

  • 2024.2.22 LGJ Round
    A你需要求\(n\timesm\)格子里随机撒\(k\)个点,期望扫多少次使得相邻的格子没有同时有点。\(n\timesm\le80,k\le20\)。直接状压求出方案数即可。B你需要维护一个数组,支持区间求和或执行覆盖操作fori:=ltordoa[i]:=a[i-k]或区间回溯成一开始的数。可持久化平衡......
  • 2024/2 月记
    22日众所周知,月记是从一个月的下旬开始写的其实是寒假太懒了,天天躺沙发上无所事事所以懒得写昨日得知今天科三课取消了然后我问客服能不能把课时换到周日客服说我这个是普通班,得加钱然后他说一节课加30我说行,那就加呗然后他吗的告诉爷爷一个课时加30......
  • 2024初三集训模拟测试3
    2024初三集训模拟测试3T1排序:显然贪心。将1ll*a[i]*a[i-1]\(\to\)1ll*(a[i]*a[i-1])囍爆零CODE#include<bits/stdc++.h>usingnamespacestd;usingllt=longlong;usingull=unsignedlonglong;#defineFor(i,a,b,c)for(inti=(a);i<=(b);i+=(c))#defineFor......
  • 字符串
    字符串KMP\(p_i\)表示\(s_{1...i}\)的最长真前缀,真后缀(“真”即是不包括原串)相等处理就很简单,每个i就判断能否更新i-1的答案,如不行就i变成\(p_{i-1}\)再处理Fu(i,2,m+n+1){ intj=p[i-1]; while(j>0&&a[i]!=a[j+1])j=p[j]; if(a[i]==a[j+1])p[i]=j+1;}EXKMP\(p_i\)表......
  • linux统计字符串出现次数(linux查询关键字出现的个数了解)
     使用脚本统计字符串出现次数#!/bin/bash#获取要监控的本地服务器IP地址IP=`ifconfig|grepinet|grep-vE'inet6|127.0.0.1'|awk'{print$2}'`echo"IP地址:"$IP#获取cpu总核数cpu_num=`grep-c"modelname"/proc/cpuinfo`echo"cpu总核数:&q......
  • 2024初三年后集训模拟测试4
    前言比赛链接普及模拟赛,但是分拿的不高,主要想\(T1\)想时间太长了,别的没时间做了,时间分配有问题。\(T1~100pts:\)模拟+打表,立体的骰子不太容易想,规律也不好找,但发现规律后超级简单,我敢说我发现的规律是全机房最简便的。但是想的时间用太长了,已经做出来了还验证半天。......
  • 2024/2/22 还是要记录才算学了
    什么是Cmake?打个比喻,小明在路边卖煎饼赚了300万准备买房,但是小明这一麻袋的5毛、一块、十块、五十、一百售楼处的小姐姐嫌麻烦不想收这些钱,那怎么办呢?小姐姐建议小明把钱拿到银行去换成一张银行卡,然后直接来刷卡就行啦!CMake这里就扮演银行的角色。MinGW提供了一套简单方便的Win......
  • 龙哥盟 Python 译文集 2024.2 更新
    每个程序员都应该知道的40个算法Python数学应用Python入门指南Python物联网入门指南Python比特币编程实用指南Python密码学实用指南Python数据结构和算法实用指南Python企业自动化实用指南PythonGPU编程实用指南Python物联网项目LearningScrapy中文版通......
  • 2024初三集训模拟测试4
    打了一场模拟赛又没命了2024初三集训模拟测试4题目难度T4\(\le\)T2\(\le\)T3\(\le\)T1T1打赌非常好题目,使我骰子旋转定义三个变量记录当前状态:上,前,左横着旋转,四个一循环,\(ans\)直接加$14$(模拟模拟模拟模拟)模拟一下就可以码#include<bits/stdc++.h>......
  • DFS算法模板(2488:A Knight's Journey)
    DFS算法(C++版本)题目一:链接:http://bailian.openjudge.cn/practice/2488/解析思路:骑士找路就是基本的DFS,用递归不断找到合适的路,找不到就回头直到找到合适的路。该题难点:要是实现字典序,也就是同样的两种选择,要走到A1而不是B1。所以就有了{-1,-2},{1,-2},{-2,-1},{2,-1},{-2,1......