字符串是 Python 中最常用的数据类型。可以使用引号( '
或 "
)来创建字符串。
创建字符串很简单,只要为变量分配一个值即可。例如:
var1 = 'Hello World!'
var2 = "Runoob"
'Alice' + 'Bob'
'AliceBob'
该表达式求值为一个新字符串,包含了两个字符串的文本。但是, 如果对一个字符串和一个整型值使用加操作符,Python就不知道如何处理,它将显示一条错误信息:
# 'Alice' + 42 #此段代码会报错
错误信息 Can't convert 'int’ object to str implicitly
表示 Python 认为,试图将一个整数连接到字符串 'Alice'
。
代码必须显式地将整数转换为字符串,因为Python不能自动完成转换。
在用于两个整型或浮点型值时, *
操作符表示乘法。
但 *
操作符用于一个字符串 值和一个整型值时,它变成了“字符串复制”操作符。
在交互式环境中输入一个字符串乘一个数字,看看效果。
'Alice' * 5
'AliceAliceAliceAliceAlice'
该表达式求值为一个字符串,它将原来的字符串重复若干次,次数就是整型的 值。
字符串复制是一个有用的技巧,但不像字符串连接那样常用。
*
操作符只能用于两个数字(作为乘法),或一个字符串和一个整型(作为字符 串复制操作符)。
否则,Python将显示错误信息。
Python不理解这些表达式是有道理的:不能把两个单词相乘, 也很难将一个任意字符串复制小数次。
var1 = 'Hello World!'
print ("var1[0]: ", var1[0])
var1[0]: H
var2 = "Runoob"
print ("var2[1:5]: ", var2[1:5])
var2[1:5]: unoo
a = "Hello"
b = "Python"
print("a + b 输出结果:", a + b)
a + b 输出结果: HelloPython
print("a * 2 输出结果:", a * 2)
a * 2 输出结果: HelloHello
print("a[1] 输出结果:", a[1])
a[1] 输出结果: e
print("a[1:4] 输出结果:", a[1:4])
a[1:4] 输出结果: ell
in
关键字的用法类似于操作系统,用于判断一个某个元素是否在一个列表或字符串中。
if( "H" in a) :
print("H 在变量 a 中")
else :
print("H 不在变量 a 中")
H 在变量 a 中
not
关键字用于取反, 用法如下。
if( "M" not in a) :
print("M 不在变量 a 中")
else :
print("M 在变量 a 中")
M 不在变量 a 中
"我叫%s,今年%d岁!" % ('小明', 10)
'我叫小明,今年10岁!'
Python 字符串格式化符号:
%c
: 格式化字符及其ASCII码 ;%s
: 格式化字符串 ;%d
: 格式化整数 ;%u
: 格式化无符号整型 ;%o
: 格式化无符号八进制数 ;%x
: 格式化无符号十六进制数 ;%X
: 格式化无符号十六进制数(大写) ;%f
: 格式化浮点数字,可指定小数点后的精度 ;%e
: 用科学计数法格式化浮点数 ;%E
: 作用同%e
,用科学计数法格式化浮点数 ;%g
:%f
和%e
的简写 ;%G
:%f
和%E
的简写 ;%p
: 用十六进制数格式化变量的地址 ;
格式化操作符辅助指令:
*
定义宽度或者小数点精度 ;-
用做左对齐 ;+
在正数前面显示加号( + ) ;<SP>
在正数前面显示空格 ;|
在八进制数前面显示零('0'),在十六进制前面显示'0x'或者'0X'(取决于用的是'x'还是'X') ;0
显示的数字前面填充'0'而不是默认的空格 ;%
'%%'
输出一个单一的'%'
;(var)
映射变量(字典参数) ;m.n.
m
是显示的最小总宽度,n
是小数点后的位数(如果可用的话) ;
与数一样,字符串也是值:
"Hello, world!"
'Hello, world!'
在这个示例中,有一点可能颇感意外:Python在打印字符串时,用单引号将其括起, 而我们使用的是双引号,其实没有任何差别。
'Hello, world!'
'Hello, world!'
这里使用的是单引号,结果却完全相同。既然如此,为何同时支持单引号和双引号呢?因为在有些情况下,这可能会有用。
"Let's go!"
"Let's go!"
'"Hello, world!" she said'
'"Hello, world!" she said'
在上述代码中,第一个字符串包含一个单引号(就这里而言,可能称之为撇号更合适), 因此不能用单引号将整个字符串括起,否则解释器将报错(做出这样的反应是正确的)。
'Let's go!'
在这里,字符串为 'Let'
,因此Python不知道如何处理后面的 s
(更准确地说是当前行余下的 内容)。
第二个字符串包含双引号,因此必须使用单引号将整个字符串括起,原因和前面一样。
实际上,并非必须这样做(这样做只是出于方便考虑)。
可使用反斜杠( \
)对引号进行转义,如下所示:
'Let\'s go!'
"Let's go!"
这样Python将明白中间的引号是字符串的一部分,而不是字符串结束的标志。 虽然如此, Python打印这个字符串时,还是使用了双引号将其括起。 与预期的一样,对于双引号可采用同样的处理手法。
"\"Hello, world!\" she said"
'"Hello, world!" she said'
像这样对引号进行转义很有用,且在有些情况下必须这样做。例如, 在字符串同时包含单引号和双引号(如'Let's say "Hello, world!"')时, 如果不使用反斜杠进行转义,该如何办呢?
para_str = """这是一个多行字符串的实例
多行字符串可以使用制表符
TAB ( \t )。
也可以使用换行符 [ \n ]。
"""
para_str
'这是一个多行字符串的实例\n多行字符串可以使用制表符\nTAB ( \t )。\n也可以使用换行符 [ \n ]。\n'
三引号让程序员从引号和特殊字符串的泥潭里面解脱出来, 自始至终保持一小块字符串的格式是所谓的 WYSIWYG (所见即所得)格式的。
print(para_str)
这是一个多行字符串的实例 多行字符串可以使用制表符 TAB ( )。 也可以使用换行符 [ ]。
"Hello, world!"
'Hello, world!'
print("Hello, world!")
Hello, world!
如果再加上表示换行符的编码 \n
,差别将更明显。
"Hello,\nworld!"
'Hello,\nworld!'
print("Hello,\nworld!")
Hello, world!
通过两种不同的机制将值转换成了字符串。
可通过使用函数 str()
和 repr()
直接使用这两种机制。
使用 str()
能以合理的方式将值转换为用户能够看懂的字符串。
例如,尽可能将特殊字符编码 转换为相应的字符。
print(str("Hello,\nworld!"))
Hello, world!
使用 repr()
时,通常会获得值的合法 Python 表达式表示。
print(repr("Hello,\nworld!"))
'Hello,\nworld!'