Python进阶-字符串格式化
前言
在 Python 3.6 之前,字符串格式化方法主要有两种:
- %格式化
- str.format()
在Python 3.6 之前,提供了一种新的字符串格式化方法:
f-strings
其比其他格式化方式更易读,更简洁,更不容易出错,而且它们也更快!
%格式化
% 格式化方法从 Python 刚开始时就一直存在了
一般使用方式,要插入多个变量的话,必须使用元组:
name = "hoxis"
age = 18
print("hello, %s. you are %s ?" %(name, age))
>>> 'hello, hoxis. you are 18 ?'
这种格式化并不是很好,因为它很冗长并且容易导致错误,比如没有正确显示元组或字典。
str.format()
Python 2.6 中引入了 str.format() 格式化方法
str.format() 是对 %格式化 的改进,它使用普通函数调用语法,并且可以通过 format() 方法为对象进行扩展。
使用 str.format() 时,替换字段用大括号进行标记:
# 替换字段用大括号进行标记
print("hello, {}. you are {}?".
name,age))
>>> 'hello, hoxis. you are 18?'
# 通过索引来以其他顺序引用变量
print("hello, {1}. you are {0}?".format(age,name))
>>> 'hello, hoxis. you are 18?'
# 通过参数来以其他顺序引用变量
print("hello, {name}. you are {age1}?".format(age1=age,name=name))
>>> 'hello, hoxis. you are 18?'
# 从字典中读取数据时还可以使用 **
person = {"name":"hoxis","age":18}
print("hello, {name}. you are {age}?".format(**person))
'hello, hoxis. you are 18?'
在处理多个参数和更长的字符串时仍然可能非常冗长
f-Strings
f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换。
name = 'hoxis'
age = 18
print(f"hi, {name}, are you {age}")
>>> 'hi, hoxis, are you 18'
print(F"hi, {name}, are you {age}")
>>> 'hi, hoxis, are you 18'
print(f"{ 2 * 3 + 1}")
>>> 7
调用函数
def test(input):
return input.lower()
name = "Hoxis"
print(f"{test(name)} is handsome.")
>>>'hoxis is handsome.'
也可以直接调用内置函数:
print(f"{name.lower()} is handsome.")
>>>'hoxis is handsome.'
特殊符号处理
- 引号的处理
可以在字符串中使用各种引号,只要保证和外部的引号不重复即可。
以下使用方式都是没问题的:
print(f"{'hoxis'}")
>>> 'hoxis'
print(f'{"hoxis"}')
>>> 'hoxis'
print(f"""hoxis""")
>>> 'hoxis'
print(f'''hoxis''' )
>>> 'hoxis'
那如果字符串内部的引号和外部的引号相同时呢?那就需要 \ 进行转义:
print(f"You are very \"handsome\"")
>>> 'You are very "handsome"'
- 括号的处理
若字符串中包含括号 {},那么你就需要用双括号包裹它:
print(f"{{74}}")
>>> '{74}'
print(f"{{{74}}}")
>>> '{74}'
可以看出,使用三个括号包裹效果一样。
当然,你可以继续增加括号数目,看下有什么其他效果:
print(f"{{{{74}}}}")
>>> '{{74}}'
print(f"{{{{{74}}}}}")
>>> '{{74}}'
print(f"{{{{{{74}}}}}}")
>>> '{{{74}}}'
重点:两对为一组
- 反斜杠
上面说了,可以用反斜杠进行转义字符,但是不能在 f-string 表达式中使用:
print(f"You are very \"handsome\"" )
>>> 'You are very "handsome"'
print(f"{You are very \"handsome\"}")
>>> 报错
# 你可以先在变量里处理好待转义的字符,然后在表达式中引用变量:
name = '"handsome"'
print(f'{name}')
>>>'"handsome"'
- 注释符号
不能在表达式中出现 #,否则会报出异常;
print(f"Hoxis is handsome # really")
>>> 'Hoxis is handsome # really'
print(f"Hoxis is handsome {#really}")
>>> 报错
Python进阶-字符串格式化的更多相关文章
- Python基础-字符串格式化_百分号方式_format方式
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- python(七)字符串格式化、生成器与迭代器
字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...
- Python 的字符串格式化和颜色控制
(部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...
- Python:字符串格式化
Python中提供了多种格式化字符串的方式,遇到一个项目,在一个文件中,就用了至少两种方式.特别是在使用Log时,更让人迷惑. 因此特地花时间来了解一下Python中字符串格式化的几种方式: # -* ...
- python中字符串格式化%与.format
Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...
- python的字符串格式化
1.python到底有那几种字符串格式化模块? python有3种格式化字符串的方法: 传统的%字符串格式符 str.format函数 字符串模版template 新的python 3.6+还提供了新 ...
- Python: 字符串格式化format()函数的使用
python从2.6开始支持format,新的更加容易读懂的字符串格式化方法,从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序号, ...
- 第十篇 Python的字符串格式化
字符串格式化:就是按照你的意愿做一个拼接的过程. 1. 字符串格式化的第一种方式:百分号方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. %[ ...
- python中字符串格式化的意义(化妆)
格式 描述%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号 ...
随机推荐
- C#中使用WeiFenLuo.WinFormsUI.Docking.dll实现窗口停靠效果
很酷的效果,很值得好好去学习的哈. 重置工具箱: 新建一个WinForm程序,项目名称为TestDockPanelControl.选中Form1窗体后选择工具箱--->>新建个添加选项卡命 ...
- (转)公有云vr客户端tcp连接数太多造成 系统卡顿问题 [bittorrent tracker优化] -公有云常见网络问题及思路
在公有云服务器 发现使用tcp(http)的tracker连接数太多 用户太多会造成windows系统卡顿 特此发表一下修改配置和路由器的方法 解决卡顿问题 解决方法1(参考内容): 修改 /etc/ ...
- 如何查看Drupal网站使用的模块
大家在学习使用Drupal的过程中,总喜欢去查看或借鉴那些做得十分优秀的drupal网站,很想知道这个drupal网站使用了哪些模块?其实很简单,已经有人帮我们实现了这个愿望. 那就是DrupalXr ...
- CAN总线典型特征
CAN总线典型特征 2016-04-12 20:36:54来源: eefocus 关键字:CAN总线 典型特征 收藏 评论(0) 分享到 微博 QQ 微信 LinkedIn CAN总线有如下基本 ...
- Java IO 文件
在java应用程序中,文件是一种常用的数据源或者存储数据的媒介.所以这一小节将会对Java中文件的使用做一个简短的概述.这里只提供一些必要的知识点. 通过Java IO读文件 如果你需要在不同端之间读 ...
- HBase启动报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is not running yet
今天进入hbase shell中输入命令报错:ERROR: org.apache.hadoop.hbase.ipc.ServerNotRunningYetException: Server is no ...
- 2017-2018-2 20155315《网络对抗技术》Exp6 :信息搜集与漏洞扫描
实验目的 进行信息搜集的工作,为实战做准备 教程 实验内容 外围信息搜集 NMAP OpenVAS 实验步骤 (一)各种搜索技巧的应用 实战的前提是进行信息搜索.当我们想要有针对地进行操作的时候,就要 ...
- 20155330 《网络对抗》 Exp6 信息搜集与漏洞扫描
20155330 <网络对抗> Exp6 信息搜集与漏洞扫描 基础问题回答 哪些组织负责DNS,IP的管理? 互联网名称与数字地址分配机构(The Internet Corporation ...
- 20155339 Exp8 Web基础
Exp8 Web基础 基础问题回答 (1)什么是表单 表单在网页中主要负责数据采集功能. 一个表单有三个基本组成部分: 表单标签,这里面包含了处理表单数据所用CGI程序的URL以及数据提交到服务器的方 ...
- Android AccessibilityService(辅助服务) 使用示例
1.前言 网上关于Android辅助服务的使用方式已经非常丰富了,所以也不在乎再多我这一篇了:-D.有同学说这是重复造轮子,题主很同意,但反过来说,如果自己没有能力造出轮子,还对重复造轮子嗤之以鼻,那 ...