前言

在 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进阶-字符串格式化的更多相关文章

  1. Python基础-字符串格式化_百分号方式_format方式

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  2. python(七)字符串格式化、生成器与迭代器

    字符串格式化 Python的字符串格式化有两种方式:百分号方式.format方式 1.百分号的方式 %[(name)][flags][width].[precision]typecode (name) ...

  3. Python 的字符串格式化和颜色控制

    (部分内容源自武神博客和网络收集.) Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两 ...

  4. Python:字符串格式化

    Python中提供了多种格式化字符串的方式,遇到一个项目,在一个文件中,就用了至少两种方式.特别是在使用Log时,更让人迷惑. 因此特地花时间来了解一下Python中字符串格式化的几种方式: # -* ...

  5. python中字符串格式化%与.format

    Python的字符串格式化有两种方式: 百分号方式.format方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存.[PEP-3101] This ...

  6. python的字符串格式化

    1.python到底有那几种字符串格式化模块? python有3种格式化字符串的方法: 传统的%字符串格式符 str.format函数 字符串模版template 新的python 3.6+还提供了新 ...

  7. Python: 字符串格式化format()函数的使用

    python从2.6开始支持format,新的更加容易读懂的字符串格式化方法,从原来的% 模式变成新的可读性更强的 花括号声明{}.用于渲染前的参数引用声明, 花括号里可以用数字代表引用参数的序号, ...

  8. 第十篇 Python的字符串格式化

    字符串格式化:就是按照你的意愿做一个拼接的过程. 1. 字符串格式化的第一种方式:百分号方式 百分号的方式相对来说比较老,而format方式则是比较先进的方式,企图替换古老的方式,目前两者并存. %[ ...

  9. python中字符串格式化的意义(化妆)

    格式 描述%% 百分号标记 #就是输出一个%%c 字符及其ASCII码%s 字符串%d 有符号整数(十进制)%u 无符号整数(十进制)%o 无符号整数(八进制)%x 无符号整数(十六进制)%X 无符号 ...

随机推荐

  1. css盒子模型(box-sizing)

    盒子模型 关于CSS重要的一个概念就是CSS盒子模型.它控制着页面这些元素的高度和宽度.盒子模型多少会让人产生一些困惑,尤其当涉及到高度和宽度计算的时候.真正盒子的宽度(在页面呈现出来的宽度)和高度, ...

  2. [SDOI2011]工作安排 BZOJ2245

    分析: 费用流裸题,按照题面要求建边就可以了,语文题,我读了10多分钟才知道这题干啥...特别是注意一个细节a[j+1]-a[j]... 附上代码: #include <cstdio> # ...

  3. 基于Azure的软件部署和开发系列沙龙

    活动简介: Azure是一种灵活和支持互操作的平台,它可以被用来创建云中运行的应用或者通过基于云的特性来加强现有应用.它开放式的架构给开发者提供了Web应用.互联设备的应用.个人电脑.服务器.或者提供 ...

  4. 2017-2018-2 20155231《网络对抗技术》实验五: MSF基础应用

    2017-2018-2 20155231<网络对抗技术>实验五: MSF基础应用 实践目标 掌握信息搜集的最基础技能与常用工具的使用方法. 实验内容 (1)各种搜索技巧的应用 比如IP2L ...

  5. 20155235 王玥 《基于Arm实验箱的接口测试和应用》 课程设计报告

    20155235 王玥 <基于Arm实验箱的接口测试和应用> 课程设计报告 一.设计方案及可行性分析 熟悉 Linux 开发环境 多线程应用程序设计 串行端口程序设计 中断实验 二.详细设 ...

  6. 20155301 Web基础

    20155301 Web基础 1.基础问题回答 (1)什么是表单 答: 表单是一个包含表单元素的区域. 表单元素是允许用户在表单中(比如:文本域.下拉列表.单选框.复选框等等)输入信息的元素 (2)浏 ...

  7. 20155302《网络对抗》Exp6 信息收集与漏洞扫描

    20155302<网络对抗>Exp6 信息收集与漏洞扫描 实验内容 (1)各种搜索技巧的应用 (2)DNS IP注册信息的查询 (3)基本的扫描技术:主机发现.端口扫描.OS及服务版本探测 ...

  8. Exp3

    利用不同免杀方式生成文件 1.msfvenom 使用msfvenom命令查看功能介绍 其中有: -p 选择一个载荷(或者叫模块) -l 载荷列表 -f 生成的文件格式 -e 编码方式 -l 编码次数 ...

  9. 20155331 《网络对抗》 Exp6 信息搜集与漏洞扫描

    20155331 <网络对抗> Exp6 信息搜集与漏洞扫描 实验问题回答 哪些组织负责DNS,IP的管理 答:美国政府授权ICANN统一管理全球根服务器,负责全球的域名根服务器.DNS和 ...

  10. js中的数据类型及判断方法

    ECMAScirpt 变量有两种不同的数据类型:基本类型,引用类型. 基本类型 ● Boolean ● Null ● Undefined ● Number ● String ● Symbol (ECM ...