文章大纲
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 
Worldstr() 与 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\npythonUnicode 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!')