携手创作,共同成长!这是我参与「掘金日新计划 · 8 月更文挑战」的第1天,点击查看活动详情
前言
继上篇《初识Python》之后我们开始进一步了解Python的字符串使用,因为笔者一直以来使用的是java,所以会在其中和java进行对比。
多种方式表示字符串
''或者""(java只能使用“”)
if __name__ == '__main__':
str1 = 's1'
print(str1)
str2 = "s1"
print(str2)
str3 = '"hello"'
print(str3)
str4 = "'hello'"
print(str4)
str5 = "\"hello\""
print(str5)
str6 = '"Isn\'t," they said.'
print(str6)
如果不想\表示转义,可以使用r
if __name__ == '__main__':
str7 = 'my\name'
print(str7)
str7=r'my\name'
print(str7)
输出:
my
ame
my\name
跨行
可以使用'''扩起来,也可以使用\n
if __name__ == '__main__':
str8="my name\nis whf"
print(str8)
str8='''my name
is whf
'''
print(str8)
拼接
if __name__ == '__main__':
str9 = 3 * 'ha' + ' is me'
print(str9)
或者不加+
if __name__ == '__main__':
str9 = 3 * 'ha' ' is me'
print(str9)
str9 = (
3 * 'ha'
' is me')
print(str9)
但是不适用于表达式或者变量还是要使用+
使用下标索引字符
这点比java方便很多,java需要转成char[]。可以从头0开始,还可以从尾-1开始
if __name__ == '__main__':
str10 = "Python"
print(str10[0])
print(str10[5])
print(str10[-1])
print(str10[-6])
输出:
P
n
n
P
还支持切片获取子字符串,包含start不包含end,start不填默认为0,end不填默认为string的大小:
if __name__ == '__main__':
str10 = "Python"
print(str10[4:])
print(str10[-2:])
输出:
on
on
记忆切片的方法,索引视为字符之间的指向:
+---+---+---+---+---+---+
| P | y | t | h | o | n |
+---+---+---+---+---+---+
0 1 2 3 4 5 6
-6 -5 -4 -3 -2 -1
所以上面的程序等同于下面的:
if __name__ == '__main__':
str10 = "Python"
print(str10[4:6])
print(str10[-2:6])
索引太大会导致错误:
if __name__ == '__main__':
str10 = "Python"
print(str10[53])
输出:
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/strings.py", line 39, in <module>
print(str10[53])
IndexError: string index out of range
但是切片不会报错(java会,笔者觉得也合理,切不到返回空):
if __name__ == '__main__':
str10 = "Python"
print(len(str10[53:]))
输出:
0
Python的字符串是不可变的所以不能更改的,因此使用索引或者切片修改字符串是会报错的:
if __name__ == '__main__':
str10 = "Python"
str10[0]='J'
str10[0:2] = 'Ja'
输出:
Traceback (most recent call last):
File "/Users/wanghaifeng/PycharmProjects/study/basic/strings.py", line 40, in <module>
str10[0:2] = 'Ja'
TypeError: 'str' object does not support item assignment
这里我想说下java的,java的字符串想索引需要转成char[],截取使用substring,获取之后都是可以重新赋值的,但是不影响字符串本身,只是创建了新的对象把引用重新赋值了,效果和Python的一样,但是java不会报错,确实容易产生歧义。