「Python|数据结构」如何用好我们离不开的字符串?

Table of Contents

Python中的字符串

  • python中的字符串是由引号以及引号包括的内容组成的。
  • 「引号」包括单引号、双引号和三引号。
  • 用了某种引号来标志字符串,且字符串内容中也出现了这个引号的时候,需要将内容中的这些同类型引号进行「转义」

字符串样例如下:

1'这一条以单引号包裹内容的字符串' 2"而这一条以双引号包裹内容的字符串" 3""" 4这是一条三引号包裹内容的字符串 5三引号包裹的内容可以是分段的形式 6在程序的眼中,这种字符串的各行之间是存在「换行符」的 7""" 8 9conten = """这里我们将字符串内容赋给某一个变量。或者说,我们定义了一个变量,变量的类型是字符串,并且指定了字符串的内容""" 10 11content_with_quote = "这个字符串包含双引号\",需要进行转义" 12

三种字符串之间的关系

不管用哪一种引号,只要多个字符串的内容相同,那么这些字符串在程序眼中就是相等的。 样例如下:

1"""检查三个字符串是否相等""" 2single_quote = 'hello world' 3double_quote = "hello world" 4trible_quote = """hello world""" 5print(single_quote == double_quote == trible_quote) 6# 输出结果为: True 7 8""" 9当三引号的内容为多行时,是额外带有换行符的, 10所以跟其他字符串不一样 11""" 12single_quote = 'hello world' 13double_quote = "hello world" 14trible_quote = """hello 15world""" 16 17print(single_quote == double_quote) # 输出为: True 18print(single_quote == trible_quote) # 输出为: False 19 20equivalent = "hello \nworld" # 将三引号内容等价表示成双引号形式 21print(equivalent == trible_quote) # 输出为: True 22

字符串的特点

  • 字符串可以看成是一组字符组成的列表的另一种表示形式。
    • 比如['a', 'b', 'c', 'd'] 约等于 'abcd'
    • 通过这一点我们可以记住:字符串跟列表一样是可以迭代的对象。或者说,列表的大部分操作,在字符串中同样适用。
  • 加法运算符:'A' + 'B' 得到 'AB'
  • 循环:for char in "ABCD",则char的值将会是'A', 'B', 'C', 'D',
  • 字符串跟元组一样是不可变类型,要得到内容不一样的字符串需要生成新的字符串
    • python2.5之后的版本,对于拼接字符串做了优化,不会每次生成新的字符串然后复制内容,而是直接扩展内存空间的大小。不用担心字符串拼接使得程序复杂度过大。
  • 各种常用的字符串操作,可以通过dir()查看字符串的内置方法,以及help()查看具体方法的适用说明。
  • 在字符串的内容中使用某个变量的值,推荐使用f-string,形如f"不变的内容, {变量的名称来使用其值}"。或者使用内置方法.format()

字符串的使用场景

字符串在现实世界对应的是文本,所以使用文本的场景,就是字符串的使用场景。比如:

  • 日志
  • 文本/文字数据
  • 输入输出
  • 注释:模块说明、类说明、函数说明等等
  • 不要用pass,而是用字符串来说明代码块的含义或作用

比如:我们可以看到python常用的网络请求库requests的自定义异常类型模块requests.exceptions有如下模块说明、类说明和函数说明

1""" 2requests.exceptions 3~~~~~~~~~~~~~~~~~~~ 4 5This module contains the set of Requests' exceptions. 6""" 7from urllib3.exceptions import HTTPError as BaseHTTPError 8 9 10class RequestException(IOError): 11 """There was an ambiguous exception that occurred while handling your 12 request. 13 """ 14 15 def __init__(self, *args, **kwargs): 16 """Initialize RequestException with `request` and `response` objects.""" 17 response = kwargs.pop('response', None) 18 self.response = response 19 self.request = kwargs.pop('request', None) 20... 21 22 23class RequestsDependencyWarning(RequestsWarning): 24 """An imported dependency doesn't match the expected version range."""

我们可以注意到RequestsDependencyWarning的定义没有写成以下错误形式

1class RequestsDependencyWarning(RequestsWarning): 2 pass

以后我们再谈到代码坏味道的时候,会知道看到这里的pass就知道这是一个有坏味道的代码,需要改成requests.exceptions中的易于阅读和理解的形式。

附录: 常见转义字符

转义字符含义
\\表示字面含义上的单个斜杆, 即\
\'单引号
\"双引号
\n换行
\t横向制表符,即键盘上的Tab键
\b退格
\v纵向制表符

好书推荐:

好课推荐:

写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇

Mastodon