本文主要介绍python原生数据结构字符串的特点以及使用场景
Python中的字符串
- python中的字符串是由引号以及引号包括的内容组成的。
- 「引号」包括单引号、双引号和三引号。
- 用了某种引号来标志字符串,且字符串内容中也出现了这个引号的时候,需要将内容中的这些同类型引号进行「转义」
字符串样例如下:
'这一条以单引号包裹内容的字符串'
"而这一条以双引号包裹内容的字符串"
"""
这是一条三引号包裹内容的字符串
三引号包裹的内容可以是分段的形式
在程序的眼中,这种字符串的各行之间是存在「换行符」的
"""
conten = """这里我们将字符串内容赋给某一个变量。或者说,我们定义了一个变量,变量的类型是字符串,并且指定了字符串的内容"""
content_with_quote = "这个字符串包含双引号\",需要进行转义"
三种字符串之间的关系
不管用哪一种引号,只要多个字符串的内容相同,那么这些字符串在程序眼中就是相等的。
样例如下:
"""检查三个字符串是否相等"""
single_quote = 'hello world'
double_quote = "hello world"
trible_quote = """hello world"""
print(single_quote == double_quote == trible_quote)
# 输出结果为: True
"""
当三引号的内容为多行时,是额外带有换行符的,
所以跟其他字符串不一样
"""
single_quote = 'hello world'
double_quote = "hello world"
trible_quote = """hello
world"""
print(single_quote == double_quote) # 输出为: True
print(single_quote == trible_quote) # 输出为: False
equivalent = "hello \nworld" # 将三引号内容等价表示成双引号形式
print(equivalent == trible_quote) # 输出为: True
字符串的特点
- 字符串可以看成是一组字符组成的列表的另一种表示形式。
- 比如
['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
有如下模块说明、类说明和函数说明
"""
requests.exceptions
~~~~~~~~~~~~~~~~~~~
This module contains the set of Requests' exceptions.
"""
from urllib3.exceptions import HTTPError as BaseHTTPError
class RequestException(IOError):
"""There was an ambiguous exception that occurred while handling your
request.
"""
def __init__(self, *args, **kwargs):
"""Initialize RequestException with `request` and `response` objects."""
response = kwargs.pop('response', None)
self.response = response
self.request = kwargs.pop('request', None)
...
class RequestsDependencyWarning(RequestsWarning):
"""An imported dependency doesn't match the expected version range."""
我们可以注意到RequestsDependencyWarning
的定义没有写成以下错误形式
class RequestsDependencyWarning(RequestsWarning):
pass
以后我们再谈到代码坏味道的时候,会知道看到这里的pass
就知道这是一个有坏味道的代码,需要改成requests.exceptions
中的易于阅读和理解的形式。
附录: 常见转义字符
转义字符 | 含义 |
---|---|
\\ | 表示字面含义上的单个斜杆, 即\ |
\' | 单引号 |
\" | 双引号 |
\n | 换行 |
\t | 横向制表符,即键盘上的Tab键 |
\b | 退格 |
\v | 纵向制表符 |
好书推荐:
好课推荐:
写文不易,如果对你有帮助的话,来一波点赞、收藏、关注吧~👇