前言:简述Python数据类型–字符串
与C/Java不同,Python中统一了
字符
与字符串
的概念,字符
是字符串
的一种特例
由 0 个或多个字符组成的有序字符序列。在Python中,用引号
括起的都是字符串,其中的引号可以是单引号,也可以是双引号。
字符串中的三大引号
引号包括单引号 ' '
,双引号 " "
和 三引号 ''' '''
,比如 'abc'
,"123"
等等。
python中,单引号和双引号可以交换使用,但双引号、单引号和三引号不能交换使用
print('I told my firend,"Python is my favorite language!"')
print("The language 'Python' is named after Monty Python,not the snake.")
print("One of Python's strength is its driverse and supportive community.")
print('My favorite '''language''' is Python!')
print('''My favorite 'language' is Python!''')
print(''My favorite '''language''' is Python!'')
print('''My favorite ''language'' is Python!''')
'''
File "e:\Python\Pythoncode--Demo\Test01.py", line 4
print('My favorite '''language''' is Python!')
^
SyntaxError: invalid syntax
'''
注意,单引号 ''
或双引号 " "
本身只是一种表示方式,不是字符串的一部分,因此,字符串 'abc'
只有 a,b,c 这 3 个字符。
为什么要有单引号 ' '
,双引号 " "
和 三引号 ''' '''
?
回答上述问题前,我们先探讨一下,如何输出一句英文:I'm OK!
print('I'm OK!')
print("I'm OK!")
print('''I'm OK!''')
'''
File "xx.py", line 1
print('I'm OK!') # 错误发生在第二个单引号后面
^
SyntaxError: invalid syntax
'''
在用单引号括起的字符串中,如果包含撇号,就将导致错误。这是因为这会导致Python将第一个单引号和撇号之间的内容视为一个字符串,进而将余下的文本视为Python代码,从而引发错误。
编写程序时,编辑器的语法突出功能可帮助你快速找出某些语法错误。看到Python代码以普通句子的颜色显示,或者普通句子以Python代码的颜色显示时,就可能意味着文件中存在引号不匹配的情况。
显然,使用单引号' '
引用I'm OK!
再输出是不可行的,如果使用双引号" "
引用一段含双引号的句子,可以输出吗?
print("春眠"不"觉晓")
'''
File "xx.py", line 1
print("春眠"不"觉晓")
^
SyntaxError: invalid syntax
'''
基于上述代码,可知单(双)引号不能引用含单(双)引号的字符串。但如果字符串本身含有单引号(双引号),则需要字符串只能使用双引号(单引号)括起
print('abc"def"gh')
print("sdf'sf'gr")
# abc"def"gh
# sdf'sf'gr
可以用转义字符\
来标识
单引号,可以使用 \'
来表示,双引号可以使用 \"
来表示。
注意,这里的是反斜杠 \
, 不是斜杆 /
。
print('I\'m OK!')
print("春眠\"不\"觉晓")
'''
I'm OK!
春眠"不"觉晓
'''
转义字符
如何输出语句:I'm ok.
?
print('I'm ok.')
# SyntaxError: invalid syntax
解释器会认为第二个引号字符就是这个字符串的结束标志,而不知道如何处理剩余的字符
为解决此问题,python定义一种特殊的标记来表示特殊字符,这种标记称为转义序列
,转义序列由反斜杠(转义字符)
(\
)+字符或数字组成的字符
。转义序列作为一个整体翻译,而不是分开翻译。
>>> print('I\'m ok.')
I'm ok.
\ +符号 | |
---|---|
\\ | 反斜杠(\ ) |
\' | 单引号(' ) |
\" | 双引号(" ) |
\ +字符 | |
---|---|
\t | 制表符(横向) |
\v | 制表符(纵向) |
\n | 换行 newline |
\r | 回车 return |
\b | backspace |
因为转义序列是字符,所以在print()
语句中输出时,要用引号括起
>>> print('I\'m learning\nPython.')
I'm learning
Python.
>>> print('\\\n\\')
\
\
如果字符串里面有很多字符都需要转义,就需要加很多\
,
为了简化,Python还允许用r''
表示''
内部的字符串默认不转义
注意:r' '
外不需要加引号,如果加了引号,那么就是去不转义的作用
>>> print('\\\t\\')
\ \
>>> print(r'\\\t\\')
\\\t\\
三引号''' '''
的作用
表示带有换行的字符串。当字符串内部有很多换行时,用\n
写在一行里不好阅读,为了简化,Python允许用'''...'''
的格式表示多行内容
>>> print('''line1
... line2
... line3''')
line1
line2
line3
上面是在
交互式命令行(Python.exe)
内输入,注意在输入多行内容时,提示符由>>>
变为...
,提示你可以接着上一行输入,注意...
是提示符,不是代码的一部分:
┌────────────────────────────────────────────────────────┐
│Command Prompt - python _ □ x │
├────────────────────────────────────────────────────────┤
│>>> print('''line1 │
│... line2 │
│... line3''') │
│line1 │
│line2 │
│line3 │
│ │
│>>> _ │
└────────────────────────────────────────────────────────┘
当输入完结束符''')
后,执行该语句并打印结果。
如果写成程序并存为.py
文件或在Python Shell
中运行,就是:
print('''line1
line2
line3''')
# line1
# line2
# line3
多行字符串'''...'''
还可以在前面加上r
使用,请自行测试:
print(r'''hello,\n
world''')
hello,\n
world
字符串的主要特征
Python中的字符串是不可变对象
Python中的字符串属于序列
凡是支持序列
字符串的操作
字符串是字符的有序序列,可以对其中的字符进行索引
索引与切片
获取字符串中一个或多个字符
索引:返回字符串中的单个字符 <字符串>[ ]
Str = "请输入带有符号的温度值:"
print(Str[-2])
# 值
切片:返回字符串中一段字符子串 <字符串>[M: N]
注意:[M:N] 意为从第**M
个到第N-1
**个,即左包括右不包括。M
默认值为0
Str = "请输入带有符号的温度值:"
print(Str[: -1])
print(Str[0 : -1])
# 请输入带有符号的温度值
# 请输入带有符号的温度值
修改字符串的大小写
字符串首字母大写–title()
name = "ada lovelace"
print(name.title())
'''
Ada Lovelace
'''
小写的字符串ada lovelace
存储到了变量name
中。在print()
语句中,方法
title()
出现在这个变量的后面。
方法是Python可对数据执行的操作。
在name.title()中,name后面的.
是让Python对变量name执行方法title()中的指定操作。
每个方法后面都跟着一对括号,这是因为方法通常需要额外的信息来完成其工作。而这种信息是在括号内提供的。
函数title()
不需要额外的信息,因此它后面的括号是空的。
title()以首字母大写的方式显示每个单词,即将每个单词的首字母都改为大写。
这很有用,因为你经常需要将名字视为信息。例如,你可能希望程序将值Ada、ADA和ada视为同一个名字,并将它们都显示为Ada。
字符串全部大小写–upper()、lower()
name = "Ada Lovelace"
print(name.upper())
print(name.lower())
'''
ADA LOVELACE
ada lovelace
'''
存储数据时,方法lower()很有用。很多时候,你无法依靠用户来提供正确的大小写,因此需要将字符串先转换为小写,再存储它们。以后需要显示这些信息时,再将其转换为最合适的大小写方式。
不太理解其应用
合并(拼接)字符串
应用场景:将姓和名存储在不同的变量中,等要显示姓名时再将它们合而为一
first_name = "ada"
last_name = "loveLace"
full_name = first_name + " " + last_name
print(full_name)
print(full_name.title())
'''
ada loveLace
Ada Lovelace
'''
Python使用加号(+)来合并字符串
这种合并字符串的方法称为拼接。通过拼接,可使用存储在变量中的信息来创建完整的消息。
使用制表符或换行符来添加空白
在编程中,空白泛指任何非打印字符,如空格、制表符\t
和换行符\n
。你可使用空白来组织输出,以使其更易读。
字符串\n\t
让Python换到下一行,并在下一行开头添加一个制表符。
print("Languages:\nPython\t\nJava\tJavaScript")
print("=================")
print("Languages:\nPython\n\tJava\tJavaScript")
'''
Languages:
Python
Java JavaScript
=================
Languages:
Python
Java JavaScript
'''
使用函数str()避免类型错误
age = 22
message = "Happy " + age + "rd Birthday!"
print(message)
'''
Traceback (most recent call last):
File "xx.py", line 2, in <module>
message = "Happy" + age + "rd Birthday!"
TypeError: can only concatenate str (not "int") to str
Python解释器发现你使用了一个值为整数(int)的变量,而整数不能直接和字符串连接,所以报错
'''
为此,可调用函数str(),它让Python将非字符串值表示为字符串
age = 23
message = "Happy" , str(age) + "rd Birthday!"
print(message)
删除空白
应用:在实际程序中,这些剥除函数最常用于在存储用户输入前对其进行清理。
在程序中,额外的空白可能令人迷惑。对程序员来说,python
和python
看起来几乎没什么两样,但对程序来说,它们却是两个不同的字符串。Python能够发现````python ```中额外的空白,并认为它是有意义的——除非你告诉它不是这样的。
空白很重要,因为你经常需要比较两个字符串是否相同。例如,一个重要的示例是,在用户登录网站时检查其用户名。但在一些简单得多的情形下,额外的空格也可能令人迷惑。所幸在Python中,删除用户输入的数据中的多余的空白易如反掌。
Python能够找出字符串开头和末尾多余的空白。
# 使用方法rstrip(), 删除字符串末尾空白
>>> favorite_language = 'python '
>>> favorite_language
'python '
>>> favorite_language.rstrip()
'python'
>>> favorite_language
'python '
# 使用方法lstrip(), 删除字符串末尾空白
>>> favorite_language = ' python'
>>> favorite_language
' python'
>>> favorite_language.lstrip()
'python'
>>> favorite_language
' python'
# 使用方法strip(), 删除字符串首尾空白
>>> favorite_language = ' python '
>>> favorite_language
' python '
>>> favorite_language.strip()
'python'
>>> favorite_language
' python '
从代码行7
、16
、25
可知,方法rstrip()、lstrip()、strip()都是暂时性删除空格
要永久删除这个字符串中的空白,必须将删除操作的结果存回到变量中:
>>> favorite_language = " python"
>>> favorite_language = favorite_language.lstrip()
>>> favorite_language
'python'
在编程中,经常需要修改变量的值,再将新值存回到原来的变量中。
这就是变量的值可能随程序的运行或用户输入数据而发生变化的原因。
这篇文章里提到的去除空格的方法在处理word时很有用:python剔除空格\u3000 - 知乎 (zhihu.com)
字符串的编码问题
我们都知道计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),0 - 255被用来表示大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母 A 的编码是 65,小写字母 z 的编码是 122。
如果要表示中文,显然一个字节是不够的,至少需要两个字节,而且还不能和 ASCII 编码冲突,所以,中国制定了 GB2312 编码,用来把中文编进去。
类似的,日文和韩文等其他语言也有这个问题。为了统一所有文字的编码,Unicode 应运而生。Unicode 把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode 通常用两个字节表示一个字符,原有的英文编码从单字节变成双字节,只需要把高字节全部填为 0 就可以。
因为 Python 的诞生比 Unicode 标准发布的时间还要早,所以最早的Python 只支持 ASCII 编码,普通的字符串 ‘ABC’ 在 Python 内部都是 ASCII 编码的。
Python 在后来添加了对 Unicode 的支持,以 Unicode 表示的字符串用u'...'
表示。
不过在最新的 Python 3 版本中,字符串是以 Unicode 编码的,也就是说,Python 的字符串支持多语言。就像上面的例子一样,我的代码中没有加u'...'
,也能正常显示。
不过由于 Python 源代码也是一个文本文件,所以,当你的源代码中包含中文的时候,在保存源代码时,就需要务必指定保存为 UTF-8 编码。当Python 解释器读取源代码时,为了让它按 UTF-8 编码读取,我们通常在文件开头写上这两行:
#!/usr/bin/env python3
# -*- coding: utf-8 -*-
第一行注释是为了告诉 Linux/OS X 系统,这是一个 Python 可执行程序,Windows 系统会忽略这个注释;
第二行注释是为了告诉 Python 解释器,按照 UTF-8 编码读取源代码,否则,你在源代码中写的中文输出可能会有乱码。
申明了 UTF-8 编码并不意味着你的 .py 文件就是 UTF-8 编码的,必须并且要确保文本编辑器正在使用UTF-8 without BOM
编码