在2020年教师节的这天,久闻Python大法好的我,以零基础业余学习者的身份,踏上了求知的旅程。

在顺利地搭建Python运行环境、问候了这个世界(print "Hello World")以后,暗爽没多久便遇到了要命的它--格式化字符串。

格式化字符串对于每个编程语言来说都是一个非常基础和常用的功能,然而对我来说却是太难啃了,真的是连环套哈!

字符串是什么?字符串是用来做什么的?

人是通过口语和文本进行信息交流的。

文本中的符号可以是大小写英文字母、数字和一些符号。

字符串(String)是由数字、字母、下划线组成的一串字符,一般记为 s=“a1a2···an”(n>=0)。它是编程语言中表示文本的数据类型。

计算机程序只用数字就可以成功执行。然而,为了方便人机交互,在电脑屏幕上显示人类可读的符号和文字是必需的。比如人们在访问Web时,使用的是域名而非数字IP地址。​

下图为Google在香港的IP地址,应该没有人平时会这些吧...
截屏2020-09-11上午8.36.10.png

Pyhon中字符串的操作有哪些?

字符串处理是每一门编程语言的基本功。Python 有一组可用于字符串的内置方法,这些方法包括:

image.png

Python字符串拼接的方法有哪些?

(String Connection翻译成中文可以是“字符串拼接”,也可以是“字符串连接”,本人觉得“字符串拼接”更合适些)

方法1-直接通过(+)操作符拼接
截屏2020-09-11上午9.30.24.png
输出结果:Hello World!

点评:使用这种方式进行字符串连接的操作效率低下,因为python中使用“+”拼接两个字符串时会生成一个新的字符串,生成新的字符串就需要重新申请内存,当拼接字符串较多时自然会影响效率。

方法2-通过str.join()方法拼接
截屏2020-09-11上午9.38.30.png
输出结果:Hello World!

点评:这种方式一般常使用在将集合转化为字符串的地方,.join()中可以是空字符,也可以是任意其他字符,当是任意其他字符时,集合中字符串会被该字符隔开,例如:
截屏2020-09-11上午9.42.39.png

方法3-通过str.format()方法拼接
截屏2020-09-11上午9.53.14.png
输出结果:Hello World!

点评:通过这种方式拼接字符串需要注意的是字符串中{}的数量要和format方法参数数量一致,否则会报错。

方法4-通过(%)操作符拼接
截屏2020-09-11上午10.08.52.png
输出结果:Hello World!

点评:这种方式与str.format()使用方式基本一致。

方法5-通过()多行拼接
截屏2020-09-11上午10.10.34.png
输出结果:Hello World!

点评:Python遇到未闭合的小括号,自动将多行拼接为一行。

方法6-通过string模块中的Template对象拼接
截屏2020-09-11上午10.13.04.png
输出结果:Hello World!

点评:Template的实现方式是首先通过Template初始化一个字符串。这些字符串中包含了一个个key。通过调用substitute或safe_subsititute, 将key值与方法中传递过来的参数对应上,从而实现在指定的位置导入字符串。这种方式的好处是不需要担心参数不一致引发异常,如:
截屏2020-09-11上午10.16.26.png
输出结果:Hello World ${s3}!

方法7-通过F-strings拼接
在Python3.6.2版本中,PEP 498提出一种新型字符串格式化机制,被称为“字符串插值”或者更常见的一种称呼是F-strings,F-strings提供了一种明确且方便的方式将Python表达式嵌入到字符串中来进行格式化:
截屏2020-09-11上午10.20.22.png
输出结果:Hello World!

在F-strings中我们也可以执行函数:
截屏2020-09-11上午10.21.36.png
输出结果:4 * 4 = 16

而且F-string的运行速度很快,比%-string和str.format()这两种格式化方法都快得多

拓展知识:PEP是什么?

PEP的全称是Python Enhancement Proposals,即Python增强提案或Python改进建议书,主要通过邮件列表讨论问题、提议等方式,经过Python核心开发者的review和认可,最终形成的正式文档。

PEP的作用
1.了解Python特性,以及为啥要涉及这些特性,是怎么设计的,怎样更好地运用它们;

  1. 跟进社区动态,获知最佳实践方案,改进自己的代码;
  2. 参与热点议题讨论,或者提交新的PEP;
  3. 深入了解和更好的使用Python的一本指南。

PEP内容组成
官网可知PEP主要分成三类:

第1类 Informational PEP-这类PEP就是提供信息,有告知类信息,也有指导类信息等等。例如PEP 20 (The Zen of Python,即著名的Python之禅)、PEP 404 (Python 2.8 Un-release Schedule, 即宣告不会有Python2.8版本)。

第2类 Process PEP-这类PEP主要是Python本身之外的周边信息。例如PEP 1(PEP Purpose and Guidelines,即关于PEP的指南)、PEP 347(Migrating the Python CVS to Subversion,即关于迁移Python代码仓)。

第3类 Standard PEP-这类PEP主要描述了Python的新功能和新实践(Implementation),是数量最多的提案。例如上文中所言字符串拼接方法7的F-strings方式,就是出自PEP 498 (Literal String Interpolation,字面字符串插值)。

格式化字符串是什么

image.png
中国有14亿人口,但是大家持有的身份证格式却是一模一样的。
在身份证的背面,显示的信息依次是——“姓名”“性别”“民族”“出生”“住址”以及“公民身份证号码”。

我们可以把“姓名”看成一个变量,“性别”是一个变量,以此类推。

现在我们使用一个叫“格式化字符串(format string)”的东西。每一次你使用双引号或单引号把一些文本引用起来,你就建立了一个字符串。字符串是非常好用的东西,使用专门的格式和语法把变量的内容放到字符串里,就相当于告诉python:“嘿,这是一个格式化字符串,把这些变量放到那几个位置。”

设想一下,如果要键入1000人的身份证信息,用上文中所说的通过(+)操作符拼接字符串将会是多么庞大的工作量,估计会把干活的程序员给逼疯了,而且稍不留神,就会出错——位置不对或语法错误。

此时就可以通过格式化字符串(比如python format)的方法,优点是:

  1. 不需要理会数据类型的问题
  2. 单个参数可以多次输出,参数顺序可以不相同
  3. 填充方式十分灵活,对其方式十分强大

以上内容是我入门Python第一天的学习心得,mark一下,明天继续...


ERIC许
1 声望0 粉丝