Python 字符串


字符串是Unicode字符的序列。字符串是不可改变的。


Python中有4种字符串写法:

  • 单引号。例如'hello'。一般使用此种写法。
  • 双引号。例如"world"。单引号和双引号没有区别。
  • 3个双引号,用于表示多行字符串。如"""hello world"""。
  • Raw strings。例如r'\abc'。Raw strings不把反斜杠当作转义字符,一般用在正则表达式中。

字符串运算符

有下面几个运算符用于字符串:

  • ==:比较两个字符串是否相等。
  • +:合并两个字符串为一个字符串。
  • *:重复字符串指定次数。
  • %:用于格式化字符串。
  • []:字符串索引,返回指定索引处的字符。第1个字符索引为0,也可以用负数表示索引,最后1个字符索引是-1,倒数第2个字符索引是-2。
  • [:]:对字符串切片。:前面是开始索引,后面是结束索引(返回字符串不包含结束索引处的字符)。如果省略开始和结束索引,表示开始索引是0,结束索引是最后位置。也可以使用负数表示索引位置。
  • in:字符串是否包含在另一个字符串中。
  • not in:字符串是否没包含在另一个字符串中。

下面是字符串运算符的例子:

#!/usr/bin/python

print('123' == '123')       # True
print('hello ' + 'world')   # hello world
print('hello ' * 3) # hello hello hello
print('no: %s' % 3) # no: 3
print('%s eat %s' % ('dog', 'bone'))    # dog eat bone

print('he' in 'hello')      # True
print('hi' not in 'hello')  # True

print('hello'[0])   # h
print('hello'[-1])  # o

print('hello'[1:3])     # el
print('hello'[1:-1])    # ell

字符串格式化

有2种方式格式化字符串:

  • 调用字符串的format方法,有位置占位符{0}和关键字占位符{keyword}两种写法。
  • 使用字符串的%操作符。格式为format % values,如果只有一个参数,values可以为str,int等基本类型,如果有多于一个参数,values可以是元组和字典。

下面是字符串格式化的例子:

#!/usr/bin/python

print('{0} eat {1}'.format('cat', 'fish'))  # cat eat fish
print('{pet} eat {food}'.format(pet = 'rabbit', food = 'carrot'))   # rabbit eat carrot

print('no: %s' % 3) # no: 3
print('%s eat %s' % ('dog', 'bone'))    # dog eat bone

d = {'color': 'white', 'pet': 'rabbit'}
print('%(pet)s is %(color)s' % d)       # rabbit is white

字符串和字节转换

str.encode(encoding)将字符串转换成字节数组。encoding的默认值是utf-8。

bytes.decode(encoding)将字节数组转换成字符串。encoding的默认值是utf-8。

下面是字符串和字节转换的例子:

#!/usr/bin/python

print('hello 世界'.encode('gbk'))     # b'hello \xca\xc0\xbd\xe7'
print('hello 世界'.encode('utf-8'))   # b'hello \xe4\xb8\x96\xe7\x95\x8c'
bytes = 'hello 世界'.encode()
print(bytes)    # b'hello \xe4\xb8\x96\xe7\x95\x8c'

print(bytes.decode())   # hello 世界
print(bytes.decode('utf-8'))    # hello 世界