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

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. Android Camera开发经验总结以及踩过的那些坑

    写在开头 需求方:上传试卷的时候,用户自己拍的照片有很多问题.如:不清晰.图片歪了.错误图片等.我们要是能够对拍摄照片进行识别处理就好了,能够裁切矫正就更好了,最好可以像二维码扫描一样,直接识别处理- ...

  2. 十八、Node.js创建Web服务器(二)

    在上一篇文章中我们在自定义模块自定义了几种文件类型的头文件加工的方法: /** * 自定义模块加工响应头文件类型 */ module.exports.getminiName=function (ext ...

  3. POJ - 2421 Constructing Roads (最小生成树)

    There are N villages, which are numbered from 1 to N, and you should build some roads such that ever ...

  4. kali linux之Meterpreter

    高级,动态,可扩展的payload 基于meterpreter上下文利用更多漏洞发起攻击,后渗透阶段一站式操作界面 完全基于内存的dll注入式payload(不写硬盘) 注入合法系统进程并建立stag ...

  5. CRC循环冗余校验算法

    现实中通信链路都不会是理想的,比特在传输的过程中可能会出现差错,0变成1,1变成0.这就叫做比特差错.因此为了保证数据传输的可靠性,在计算网络传输数据时,必须采用各种检验措施来处理比特差错.在数据链路 ...

  6. utf 8无bom和utf 8什么区别

    今天在上传CSV文件的时候,Windows下调试一切正常.妈的一到Linux下面,就出现问题,第一行数据总是读取不出来, 利用print_r()打印出读取文件的内容,发现有一个很奇怪的字符在作怪.为什 ...

  7. 简易 PHP 教程小记

    一.简介: 1.用处广 2.免费 3.PHP Hypertext Preprocessor 二.语法: 1.<?php coders ?> 2.注释:"#" " ...

  8. 05. flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中)

    flex元素水平垂直居中(三种position水平垂直居中和两种新老版本水平垂直居中) (1).position : <!DOCTYPE html> <html lang=" ...

  9. web及时通信传输的几种方法

    有哪些: 轮询.长轮询.iframe流.websocket 轮询:http的请求有一个很明显的缺点,就是只能有客户端发起,不能由服务端主动推送,所以轮询就是定时向服务器发送请求,去获取数据 优点:传输 ...

  10. 网络编程- 解决黏包现象方案二之struct模块(七)

    上面利用struct模块与方案一比较,减少一次发送和接收请求,因为方案一无法知道client端发送内容的长度到底有多长需要和接收OK.多一次请求防止黏包,减少网络延迟