文章大纲
Python 对于字符串的处理比较灵活,也是编写 Python 程序必不可少的一种数据类型。
引号以及对引号进行转义
在 Python 中使用字符串需要对其添加单引号或双引号:
>>> Hello World
File "<stdin>", line 1
Hello World
^^^^^
SyntaxError: invalid syntax
>>> 'Hello World'
'Hello World'
>>> "Hello World"
'Hello World'
>>>
如果直接在解释器中输入字符串将导柱出现语法错误,中文也是如此。
单引号与双引号有区别吗?没有区别,但是会有特定的情况,例如:
>>> "Let't Go!"
"Let't Go!"
>>> 'Let't Go!'
File "<stdin>", line 1
'Let't Go!'
^
SyntaxError: invalid syntax
>>> 'He said: "Try it!"'
'He said: "Try it!"'
>>> "He said: "Try it!""
File "<stdin>", line 1
"He said: "Try it!""
^^^
SyntaxError: invalid syntax
归纳就是引号里面不能嵌套同种类型的引号,如果字符串中引号,Python 需要使用不同的引号进行括起,或者使用转义符 \
。
>>> 'Let\'t Go!'
"Let't Go!"
字符串的拼接
使用 +
进行字符串的拼接:
>>> "Hello" + "World"
'HelloWorld'
>>> a="Hello"
>>> b="World"
>>> a + ' ' + b
'Hello World'
str() 和 repr()
前面在 Python 解释器返回的内容在实际程序中用户是看不见的,如果要看到输出需要使用到 print()
函数。
>>> string="Hello World"
>>> string
'Hello World'
>>> print(string)
Hello World
可以看到在解释器中返回内容的区别,直接调用变量名返回了一个引号括起的内容,代表是字符串,print()
打印的内容没有引号。
通过 print()
可以使用一些 如\n
的换行符:
>>> print("Hello \nWorld")
Hello
World
str()
与 repr()
的区别:
str
:返回对用户友好格式的对象repr
:返回对开发者友好的格式对象
更直观的例子:>>> import datetime >>> today = datetime.datetime.now() >>> print(str(today)) 2023-10-25 23:09:42.719793 >>> print(repr(today)) datetime.datetime(2023, 10, 25, 23, 9, 42, 719793)
补充:
当对对象调用str()
时,调用的是对象的__str__
方法,调用repr()
时,调用对象的__repr__
方法。
长字符串、原始字符串和字节
要表示很长的字符串(多行),可以使用三引号:
>>> print(''' 第一行内容
... 第二行内容
... 第三行内容
... ''')
第一行内容
第二行内容
第三行内容
原始字符串不会特殊字符进行转义,例如 \
, 在路径中经常使用到该方式,例如路径为 C:\data\npython
:
>>> print("C:\data\npython")
C:\data
python
使用原始字符进行打印:
>>> print(r"C:\data\npython")
C:\data\npython
Unicode bytes bytearray
Python 字符串使用 Unicode 编码来表示文本,在特定情况下也可以使用其它的编码,例如:
>>> '你好世界'.encode("utf-8")
b'\xe4\xbd\xa0\xe5\xa5\xbd\xe4\xb8\x96\xe7\x95\x8c'
>>> '你好世界'.encode("utf-32")
b'\xff\xfe\x00\x00`O\x00\x00}Y\x00\x00\x16N\x00\x00Lu\x00\x00'
>>> '你好世界'.encode("GBK")
b'\xc4\xe3\xba\xc3\xca\xc0\xbd\xe7'
>>> '你好世界'.encode("ASCII")
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
UnicodeEncodeError: 'ascii' codec can't encode characters in position 0-3: ordinal not in range(128)
可以看到同样的字符上述中文字符使用上述编码时 GBK 编码占用空间最少,同时转换 ASCII 码失败,因为在 ASCII 码中没有定义中文字符。
转换后前面的 b
代表的是 bytes
类型,这种类型的字符串无法更改。
bytearray
是 bytes
的可变版,可以进行修改:
>>> str = bytearray(b"Hello!")
>>> str[0] = ord(b"C")
>>> str
bytearray(b'Cello!')