Python 基础学习02:字符串

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 类型,这种类型的字符串无法更改

bytearraybytes 的可变版,可以进行修改:

>>> str = bytearray(b"Hello!")
>>> str[0] = ord(b"C")
>>> str
bytearray(b'Cello!')

发表评论

您的电子邮箱地址不会被公开。 必填项已用 * 标注

滚动至顶部