字符串格式化是拼接字符串的一种手段

join和+拼接字符串的方法,难以控制格式

printf style 字符串格式化

这种方法是从c语言继承过来的

# 待格式化的字符串:一个字符串存在占位符
In [1]: s='i love %s' # 传入的参数顺序地替换占位符,并返回替换之后的字符串,但原串不变
In [2]: s % ('python',)
Out[2]: 'i love python'
In [3]: s
Out[3]: 'i love %s' # 传入的参数和占位符个数不匹配、或传入的参数和类型不匹配,则抛出TypeError
In [4]: 'i love %s,i am %d' % ('python',22)
Out[4]: 'i love python,i am 22' In [5]: 'i love %s,i am %d' % ('python',)
TypeError: not enough arguments for format string In [6]: 'i love %s,i am %d' % ('python','sfc')
TypeError: %d format: a number is required, not str In [11]: print('%s %%d' % 'python')
python %d

format

# 使用大括号作为占位符,调用format时其传入的参数会替换大括号
In [3]: s='i love {},i am {}';s.format('python',18)
Out[3]: 'i love python,i am 18' # 可以在占位符中加数字来指定传入哪个参数,并且该位置参数可以多次使用
In [4]: s='i love {1},i am {0}';s.format(18,'python')
Out[4]: 'i love python,i am 18' In [5]: s='i love {1},i am {1}';s.format(18,'python')
Out[5]: 'i love python,i am python' In [19]: '{0},{1},{2}'.format(*'abc')
Out[19]: 'a,b,c' # 可以在占位符中加标识符来指定关键字参数,并且关键字参数和位置参数可以同时使用
In [7]: s='my name is {0},i love {lang},i am {age}';s.format('jelly',lang='python',age=18)
Out[7]: 'my name is jelly,i love python,i am 18' # 什么时候会抛出异常?
# {} 是按照顺序来使用位置参数,那么当占位符和参数个数不匹配则抛出异常
# {数字i} 会把传入的参数当成一个列表args,使用位置参数i索引(args[i])。当i不是args的索引时抛出IndexError。
# {关键字k} 会把关键字参数当成一个字典kwargs,使用kwargs[k]。当k不是kwargs的key时,会抛出KeyError异常。 In [10]: '{} {}'.format(88)
------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-10-569fb0faf265> in <module>()
----> 1 '{} {}'.format(88) IndexError: tuple index out of range In [11]: '{} {lang}'.format(88)
------------------------------------------------------
KeyError Traceback (most recent call last)
<ipython-input-11-8286ca2a6881> in <module>()
----> 1 '{} {lang}'.format(88) KeyError: 'lang' In [12]: '{1},{2},{3}'.format('a','b','c')
#分析:args=[a,b,c],args[i=1]='b',args[i=2]='c',args[i=3]=?故抛出IndexError
---------------------------------------------------------------------------
IndexError Traceback (most recent call last)
<ipython-input-5-bedd884b41e7> in <module>()
----> 1 '{1},{2},{3}'.format('a','b','c') IndexError: tuple index out of range

[PY3]——内置数据结构(4)——字符串格式化(format)的更多相关文章

  1. [PY3]——内置数据结构(5)——字符串编码

    py2和py3中关于字符串的最大区别? python2中只有 unicode类型 而python3中有 string bytes两种类型 关于string和bytes的区分? 1.str是文本序列.b ...

  2. [PY3]——内置数据结构(3)——字符串及其常用操作

    字符串及其常用操作xmind图 字符串的定义 1. 单引号/双引号 In [1]: s1='hello world' In [2]: s1="hello world" 2. 三对单 ...

  3. Python内置数据结构之字符串str

    1. 数据结构回顾 所有标准序列操作(索引.切片.乘法.成员资格检查.长度.最小值和最大值)都适用于字符串,但是字符串是不可变序列,因此所有的元素赋值和切片赋值都是非法的. >>> ...

  4. [PY3]——内置数据结构(6)——集合及其常用操作

    集合及其常用操作Xmind图          集合的定义 # set( ) # {0,1,2} //注意不能用空的大括号来定义集合 # set(可迭代对象) In [1]: s=set();type ...

  5. [PY3]——内置数据结构(7)——字典及其常用操作

    字典及其常用操作Xmind图 关于字典 字典是一种key-value结构 字典是无序的 字典的定义 # {}大括号可以直接定义一个空字典 In [1]: d={};type(d) Out[1]: di ...

  6. [PY3]——内置数据结构(9)——线性结构与切片/命名切片slice()

    线性结构的总结 列表list  元组tuple  字符串str  bytes  bytearray的共同点: 都是顺序存储.顺序访问的: 都是可迭代对象: 都可以通过索引访问 线性结构的特征: 可迭代 ...

  7. [PY3]——内置数据结构(8)——解构与封装

    ### 解构的理解与用法 ### 解构是python很有特色的一个功能,被很多语言借鉴(例如ES6) # 元素按照顺序赋值给变量 In [31]: lst=list(range(5)) In [32] ...

  8. [PY3]——内置数据结构(1)——列表及其常用操作

    列表及其常用操作_xmind图         about列表 列表是一个序列,用于顺序存储数据 列表分为两种:ArrayList(用数组实现).LinkedList(用链表实现) 定义与初始化 #l ...

  9. [PY3]——内置数据结构(2)——元组及其常用操作

    定义和初始化 #tuple() 使用工厂函数tuple定义一个空元组 #() 使用圆括号定义一个空元组 #(1,2,3) 使用圆括号定义有初始值的元组 #tuple(可迭代对象) 把可迭代对象转换为一 ...

随机推荐

  1. Split 之特殊用法

    java中split()特殊符号"." "|" "*" "\" "]"   关于点的问题是用stri ...

  2. 菜鸟的Xamarin.Forms前行之路——原生Toast的简单实现方法

    项目中信息提示框,貌似只有个DisplayAlert,信息提示太过于单一,且在有些场合Toast更加实用,以下是一个简单的原生Toast的实现方法 项目地址:https://github.com/we ...

  3. loadrunner 11问题汇总

    1.问题描述:安装loadrunner11后,录制脚本时,explore未打开,event为0,录制结果为空.安装环境是window7+ie8+loadrunner11 解决方案: 1.首先要把ie设 ...

  4. C语言 算平均数

    int main() { int number ; int sum = 0; int count = 0; do { scanf("%d", &number ); if( ...

  5. “全栈2019”Java第八十章:外部类是否能实现本类中的接口?

    难度 初级 学习时间 10分钟 适合人群 零基础 开发语言 Java 开发环境 JDK v11 IntelliJ IDEA v2018.3 文章原文链接 "全栈2019"Java第 ...

  6. leecode刷题(15)-- 验证回文字符串

    leecode刷题(15)-- 验证回文字符串 验证回文字符串 给定一个字符串,验证它是否是回文串,只考虑字母和数字字符,可以忽略字母的大小写. 说明:本题中,我们将空字符串定义为有效的回文串. 示例 ...

  7. Linux常用运维指令

    cd data/apps./=========================================== ps -ef | grep tomcatps -ef | grep desktopX ...

  8. KVM 安装 VMware 虚拟机

    去掉了“双引号”改为:vmx.allowNested = TRUE 打开在其中创建虚拟机的文件夹VMDISK和搜索与您的虚拟机的名称. vmx 文件. 用记事本打开它,并添加上述条目. 所以 vmx. ...

  9. NOIP模拟赛

    T1 1.聪明的小偷 (thief.pas/c/cpp) [问题描述] 从前有一个收藏家收藏了许多相同的硬币,并且将它们放在了n个排成一排的口袋里,每个口袋里都装了一定数量的硬币. 这些硬币价值不菲, ...

  10. rinetd做代理!redis做代理使外网直接远程连接

    Centos7下Rinetd安装与应用   Linux下做地址NAT有很多种方法.比如haproxy.nginx的4层代理,linux自带的iptables等都能实现.haproxy.nginx就不说 ...