前言

在 Python 3.6 之前,字符串格式化方法主要有两种:

  • %格式化
  • str.format()

在Python 3.6 之前,提供了一种新的字符串格式化方法:

  • f-strings

    其比其他格式化方式更易读,更简洁,更不容易出错,而且它们也更快!

%格式化

% 格式化方法从 Python 刚开始时就一直存在了

一般使用方式,要插入多个变量的话,必须使用元组:

  1. name = "hoxis"
  2. age = 18
  3. print("hello, %s. you are %s ?" %(name, age))
  4. >>> 'hello, hoxis. you are 18 ?'

这种格式化并不是很好,因为它很冗长并且容易导致错误,比如没有正确显示元组或字典。

str.format()

Python 2.6 中引入了 str.format() 格式化方法

str.format() 是对 %格式化 的改进,它使用普通函数调用语法,并且可以通过 format() 方法为对象进行扩展。

使用 str.format() 时,替换字段用大括号进行标记:

  1. # 替换字段用大括号进行标记
  2. print("hello, {}. you are {}?".
  3. name,age))
  4. >>> 'hello, hoxis. you are 18?'
  5. # 通过索引来以其他顺序引用变量
  6. print("hello, {1}. you are {0}?".format(age,name))
  7. >>> 'hello, hoxis. you are 18?'
  8. # 通过参数来以其他顺序引用变量
  9. print("hello, {name}. you are {age1}?".format(age1=age,name=name))
  10. >>> 'hello, hoxis. you are 18?'
  11. # 从字典中读取数据时还可以使用 **
  12. person = {"name":"hoxis","age":18}
  13. print("hello, {name}. you are {age}?".format(**person))
  14. 'hello, hoxis. you are 18?'

在处理多个参数和更长的字符串时仍然可能非常冗长

f-Strings

f-strings 是指以 f 或 F 开头的字符串,其中以 {} 包含的表达式会进行值替换。

  1. name = 'hoxis'
  2. age = 18
  3. print(f"hi, {name}, are you {age}")
  4. >>> 'hi, hoxis, are you 18'
  5. print(F"hi, {name}, are you {age}")
  6. >>> 'hi, hoxis, are you 18'
  7. print(f"{ 2 * 3 + 1}")
  8. >>> 7

调用函数

  1. def test(input):
  2. return input.lower()
  3. name = "Hoxis"
  4. print(f"{test(name)} is handsome.")
  5. >>>'hoxis is handsome.'

也可以直接调用内置函数:

  1. print(f"{name.lower()} is handsome.")
  2. >>>'hoxis is handsome.'

特殊符号处理

  • 引号的处理

可以在字符串中使用各种引号,只要保证和外部的引号不重复即可。

以下使用方式都是没问题的:

  1. print(f"{'hoxis'}")
  2. >>> 'hoxis'
  3. print(f'{"hoxis"}')
  4. >>> 'hoxis'
  5. print(f"""hoxis""")
  6. >>> 'hoxis'
  7. print(f'''hoxis''' )
  8. >>> 'hoxis'

那如果字符串内部的引号和外部的引号相同时呢?那就需要 \ 进行转义:

  1. print(f"You are very \"handsome\"")
  2. >>> 'You are very "handsome"'
  • 括号的处理

若字符串中包含括号 {},那么你就需要用双括号包裹它:

  1. print(f"{{74}}")
  2. >>> '{74}'
  3. print(f"{{{74}}}")
  4. >>> '{74}'

可以看出,使用三个括号包裹效果一样。

当然,你可以继续增加括号数目,看下有什么其他效果:

  1. print(f"{{{{74}}}}")
  2. >>> '{{74}}'
  3. print(f"{{{{{74}}}}}")
  4. >>> '{{74}}'
  5. print(f"{{{{{{74}}}}}}")
  6. >>> '{{{74}}}'

重点:两对为一组

  • 反斜杠

上面说了,可以用反斜杠进行转义字符,但是不能在 f-string 表达式中使用:

  1. print(f"You are very \"handsome\"" )
  2. >>> 'You are very "handsome"'
  3. print(f"{You are very \"handsome\"}")
  4. >>> 报错
  5. # 你可以先在变量里处理好待转义的字符,然后在表达式中引用变量:
  6. name = '"handsome"'
  7. print(f'{name}')
  8. >>>'"handsome"'
  • 注释符号

不能在表达式中出现 #,否则会报出异常;

  1. print(f"Hoxis is handsome # really")
  2. >>> 'Hoxis is handsome # really'
  3. print(f"Hoxis is handsome {#really}")
  4. >>> 报错

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. Android向手机通讯录中的所有的联系人(包括SIM卡),向手机通讯录中插入联系人

    package com.example.myapi.phonepersion; import java.util.ArrayList; import java.util.List; import an ...

  2. 【甘道夫】CDH5.2的Maven依赖

    之前一直结合Maven开发Hadoop2.2.0的程序.环境换成CDH5.2后报错,发现是Maven依赖库的问题. 之前一直使用 http://mvnrepository.com/ 查找maven依赖 ...

  3. Spark SQL -- Hive

    使用Saprk SQL 操作Hive的数据 前提准备: 1.启动Hdfs,hive的数据存储在hdfs中; 2.启动hive -service metastore,元数据存储在远端,可以远程访问; 3 ...

  4. matplotlib 雷达图2

    说明 搞了一个最新版本的雷达图,比以前那个美观. 不多说,代码奉上: 完整代码 ''' matplotlib雷达图 ''' import numpy as np import matplotlib.p ...

  5. [Deep-Learning-with-Python]计算机视觉中的深度学习

    包括: 理解卷积神经网络 使用数据增强缓解过拟合 使用预训练卷积网络做特征提取 微调预训练网络模型 可视化卷积网络学习结果以及分类决策过程 介绍卷积神经网络,convnets,深度学习在计算机视觉方面 ...

  6. Tengine 添加第三方监控模块nginx-module-vts

    一.概述 除nginx官网源码提供的各种模板,nginx还有第三方模块.官方文档中也列出了nginx的很多第三方模块,除官网之外,还有很多的有用的模块也能在Github上找到. 官网第三方模块地址:h ...

  7. 大白话说Java泛型:入门、使用、原理

    文章首发于[博客园-陈树义],点击跳转到原文<大白话说Java泛型:入门.使用.原理> 远在 JDK 1.4 版本的时候,那时候是没有泛型的概念的.当时 Java 程序员们写集合类的代码都 ...

  8. 《HTTP权威指南》读书笔记:缓存

    缓存的定义 Web缓存是可以自动保存常见文档副本的HTTP设备(包括浏览器?) 缓存的作用 减少冗余数据传输 缓解带宽瓶颈(很多网络为本地网络客户端提供的带宽比为远程服务器提供的带宽要宽) 缓解瞬时拥 ...

  9. Salesforce随笔: 将Visualforce Page渲染为PDF文件(Render a Visualforce Page as a PDF File)

    参照 : Visualforce Developer Guide 第60页 <Render a Visualforce Page as a PDF File> 你可以用PDF渲染服务生成一 ...

  10. 177. Convert Sorted Array to Binary Search Tree With Minimal Height【LintCode by java】

    Description Given a sorted (increasing order) array, Convert it to create a binary tree with minimal ...