Python 学习第二章 之 字符串
前言
我是一个做java 编程的程序猿,程序猿中的语言不止一种,于是自学了python ,在我学习过程中记录一些笔记和心得,很荣幸你能看到我的博客,如果内容中有什么错误或意见,请下方留言。
学习过程中,我很容易带入java的语法和思想去学习python,虽然他们有共同之处,但是学习过程中我应该告诉自己,“不懂编程,从头开始”。
知识来源:
书本知识来源 :《python 基础教程 第三版》
视频知识来源: 《北京图灵学院》 python 讲师 ——永远只有十八岁的刘大拿

以及带我入门的 微信公众号 《python小课》
如果觉得我在打广告的童靴,恭喜你们答对了,《python小课》 是我 花了 9.9元买的体验课,也是我的python 路上的第一个引路者。至于为什么不在那学习?那是因为我穷,穷,穷。
但我并不想放弃,然后就在网易课程上看到了课程齐全还免费的 python 课程《免费Python全系列教程全栈工程师 - 网易云课堂》,随后也买了一本python书。
之所以要说这些 尤其是视频学习,首先作为一个编程人员,一名学习者应该做到 "吃水不忘挖井人”,关键别人又不收费。所以我这样做,觉得过分的朋友,见谅。
字符串的定义
#第一种 单引号
one = 'hello python'
#第二种 双引号
two = "hello python"
#第二种 三引号
three = '''hello python'''
# 使用 print 将结果输出到控制台
print(one) # hello python
print(two) # hello python
print(three) # hello python
单引号和双引号
若每天特殊要求,他们的作用是一样的,但是有时候我们需要 单引号和双引号混合着用 如下图:
str ="Let's go to shopping"
print(str)
#打印结果
Let's go to shopping
字符串与转义
如上个面的那个例子 可不可以用单引号?但是可以的,但是需要一些“特殊处理”——转义(\)
#首先我们看看不转义会是什么结果
str ='Let's go to shopping'
print(str)
# 输出结果为 程序报错了 很简单 语法错误
File "D:/develTools/PycharmProjects/project1/venv/Include/test3.py", line 2
str ='Let's go to shopping'
^
SyntaxError: invalid syntax
#然后我们看看转义会是什么结果
str ='Let\'s go to shopping'
print(str)
#结果正常输出
Let's go to shopping
Python 转义字符
在需要在字符中使用特殊字符时,python 用反斜杠 \ 转义字符。如下表:
| 转义字符 | 描述 |
|---|---|
| \(在行尾时) | 续行符 |
| \\ | 反斜杠符号 |
| \' | 单引号 |
| \" | 双引号 |
| \a | 响铃 |
| \b | 退格(Backspace) |
| \e | 转义 |
| \000 | 空 |
| \n | 换行 |
| \v | 纵向制表符 |
| \t | 横向制表符 |
| \r | 回车 |
| \f | 换页 |
| \oyy | 八进制数,yy代表的字符,例如:\o12代表换行 |
| \xyy | 十六进制数,yy代表的字符,例如:\x0a代表换行 |
| \other | 其它的字符以普通格式输出 |
虽然很多实际开发中并不会都会用到....
#-------------------------记录一下我不常用的----------------------------
# 第一种 \ 续行符
#运行流程 2*3 -4*8 =-26
# 但是我写到 4*8 的想换行了,于是我在* 加了一个\ 继续写 8 然后回车执行
>>> 2* 3 - 4 *\
... 8
-26
>>>
# 第二种 \a 响铃 我百度了,不知道什么意思 据说可以发出一种 声音
'''
是ASCII中的响铃字符,但如何显示这个字符是控制台管理程序自己决定的,Windows下的CMD和Linux下的各种终端一般都回很规矩的把这个字符“显示”成一声铃响,但不幸的是,IDLE的“控制台”是它自己实现的,它决定把这个字符显示成一个方块,所以你在IDLE里只能看到一个方块。
就酱。
'''
>>> print("\a")
>>>
# 知道的朋友下方留言
#第三种 \b 退格
>>> print("aaa\bcccc")
aacccc
>>>
# 从代码中我看出他会向后退一格, 注意a 的个数
# \000 空格
>>> print("我在这里打一个\000空格")
我在这里打一个 空格
>>>
# 剩下的 制表符 \t 和 \v
tableHead="学号\t姓名\t年龄"
student="1\t\t张三\t18"
print(tableHead)
print(student)
#结果
学号 姓名 年龄
1 张三 18
print("学号\v1\v2")
学号12
三引号
三引号的与 单引号和双引号,作用是一样的,都是用于定义字符串,但是三引号有个很特殊的作用。
我们用字符串把这首诗表现出来
静夜思
李 白
床 前 明 月 光,
疑 是 地 上 霜。
举 头 望 明 月,
低 头 思 故 乡。
# 单引号
print('静夜思 \n李 白 \n床 前 明 月 光,\n疑 是 地 上 霜。\n举 头 望 明 月,\n低 头 思 故 乡。')
# 打印结果
静夜思
李 白
床 前 明 月 光,
疑 是 地 上 霜。
举 头 望 明 月,
低 头 思 故 乡。
# 双引号
print("静夜思 \n李 白 \n床 前 明 月 光,\n疑 是 地 上 霜。\n举 头 望 明 月,\n低 头 思 故 乡。")
# 打印结果
静夜思
李 白
床 前 明 月 光,
疑 是 地 上 霜。
举 头 望 明 月,
低 头 思 故 乡。
#三引号
print('''
静夜思
李 白
床 前 明 月 光,
疑 是 地 上 霜。
举 头 望 明 月,
低 头 思 故 乡。
''')
#打印结果
静夜思
李 白
床 前 明 月 光,
疑 是 地 上 霜。
举 头 望 明 月,
低 头 思 故 乡。
Process finished with exit code 0
这就是 三引号的作用,可以用原始内容进行原样输出。多用于文章、评论等数据信息。
字符串拼接
#-----------------------第一种方式 空格--------------------
# 在命令行里可以这么输
>>> 'hello' 'liu'
'helloliu'
>>>
# 但是 编辑器里 需要定义变量接收
name ='hello' 'liu'
print(name)
helloliu
#-----------------------第二种方式 + 符号 --------------------
name='张三'
print('my name is:'+name)
# 输出结果
my name is:张三
推荐使用 第二种 ,第一种方式不能使用变量
# 出现语法错误
k = '1'
v = '2'
s =k v
print(s)
s =k v
^
SyntaxError: invalid syntax
# 这样是没有问题的
s ='1' '2'
print(s)
12
若字段太长了,总是使用 + 太麻烦了,print() 我们提供了另一种方式
# 先定义一些数据
xiaoming="我们明天去爬山吧;"
xiaoli="好呀好呀;"
xiaogang="我也要去;"
xiaoqiang="我也要;"
# 普通+字符串连接
print(xiaoming+xiaoli+xiaogang+xiaoqiang)
#运行结果
我们明天去爬山吧;好呀好呀;我也要去;我也要;
# print 提供的
print(xiaoming,xiaoli,xiaogang,xiaoqiang)
#运行结果
我们明天去爬山吧; 好呀好呀; 我也要去; 我也要;
两则作用一样,若数据很多的话,第一种明显比较乱,第二种就比较清晰一点。两种没有优劣之分,只是一种新的表达方式,了解就好。
字符串表示 str 和 repr
python 打印所有的字符串时,都用引号将其括起来,上面的案例,你也发现了这一点。这是因为Python 打印值时,保留其在代码中的样子,而不是你希望用户看到的样子。但如果使用print,结果将不同。
我们看看两则区别
# 首先定义一个变量 用于测试
content ='hello \n python!'
#str
print(str(content))
# 结果
'''
hello
python!
'''
#repr
print(repr(content))
# 结果
'''
'hello \n python!'
'''
注意:在python 中 在定义一个变量中 使用 ''' ''' 表示的是字符串定义,但是 直接定义 表示 为多行注释 ,表示不会被计算机解析执行,# 表示 为单行注释,只能定义一行内容。
str 是一个类,而repr 是一个函数
repr 有什么用?
repr() 函数将对象转化为供解释器读取的形式,返回一个对象的 string 格式。
长字符串和原始字符串和字节
长字符串:简单点说 上面定义 三引号 就是长字符串, 支持跨行输出 无序进行转义
content='''
第一行内容....
第二行内容....
第N行内容....
'''
print(content)
#结果
第一行内容....
第二行内容....
第N行内容....
普通字符也可以进行跨行输出 但是需要进行转义
#需要用到 \ 续行符
content='\
第一行内容....\
第二行内容....\
第N行内容....\
'
print(content)
#结果
第一行内容.... 第二行内容.... 第N行内容....
#你觉得结果不是你想到那样?那么加上换行符 试试(\n)?
content='\
第一行内容....\n\
第二行内容....\n\
第N行内容....\n\
'
print(content)
#结果
第一行内容....
第二行内容....
第N行内容....
原始字符串:是不以特殊方式处理反斜杠,案例:
#文件路径
path='C:\nweFile'
#不给予处理
print(path)
#运行结果
C:
weFile
#这样的结果肯定不是我们想要的 所以需要处理一下
path='C:\\nweFile'
print(path)
#运行结果
C:\nweFile
#将 \ 再转义一次就行了,但是实际开发中,文件路径肯定不知只有这么一点...
# 如下
path='C:\nProgram Files\nCommon Files\nmicrosoft shared\nMSInfo\nzh-CN'
#难道都要一个个都加上吗?所以这时候我们就需要 原始字符串了
path=r'C:\nProgram Files\nCommon Files\nmicrosoft shared\nMSInfo\nzh-CN'
print(path)
#运行结果
C:\nProgram Files\nCommon Files\nmicrosoft shared\nMSInfo\nzh-CN
如你所见 原始字符串定义就是 用 r 作为字符串的前缀。 变量 = r '具体内容' ,表示并不会对\ 进行特殊处理,而是让字符出原样输出。
这也表示 \ 反斜杠也会包含到最终的字符串中
content=r'Let\'s go!'
print(content)
#运行结果
Let\'s go!
但是值得注意的是,原始字符串 不能以单个反斜杠 \ 结尾。
#错误示范
content=r'Let\'s go!\' print(content) #运行结果 content=r'Let\'s go!\' ^ SyntaxError: EOL while scanning string literal
#正确示范
content=r'Let\'s go!\\'
print(content)
#运行结果
Let\'s go!\\
有时候我们要将\ 作为字符串的结尾怎么办呢? 下面介绍一种简单的处理方式
content=r'Let\'s go!' '\\' print(content)
#运行结果
Let\'s go!\
请注意:指定原始字符串时,可使用单引号或双引号将其括起来,还可以使用三引号将其括起来。
repr和原始字符串:作用是一样,只是表达的形式不同,r 更像是 repr 的缩写(不知道能不能这么理解,若有错误或建议,请指出)
网上没有找到相关说明,书本也没做介绍他们的区别,但是我用repr()函数和 r 做案例测试的时候,发现他们结果都时一致的,所以才冒失的推断他们作用是一样的(同样是将字符串的原始内容展示,同样不能一单个反斜杠结尾),只是表达的方式不同而已。
字节(以下内容 按照 Python 基础教程 第三版 进行说明)
说到字节,就不得不说 编码 Unicode、bytes 和 bytearray
python 字符串使用Unicode编码来表示文本,大致而言,每个Unicode字符都用一个码点(code point)表示,而码点是Unicode标准给每个字符指定的数字。所以能够表示现代软件中129个文字系统中的12万个以上的字符。当然键盘上肯定不会有这么按键,因此有一种指定Unicode字符的通用机制,使用16或32位的十六进制字面量。参阅网址:http://unicode-table.com
Unicode的理念很简单,却带来了一些挑战,其中之一就是编码问题。在内存和磁盘中,所有的对象都是以二进制数字(0和1)表示(8个为一组,即 1 个字节),字符串也不例外。
python 提供了两种类似的类型,不可变的bytes 和可变的bytearray。如果需要可直接创建bytes对象(而不是字符串),方法是使用前缀b;
>>> b'hello python'
b'hello python'
然后1个字节之只能表示256个不同的值,离Unicode标准的要求差很远。Python bytes字面量只支持ASCII标准中的128个字符,而余下的128个值必须用转义表示,如\xf0表示16进制值。
详细内容 请看书(主要是内容太抽象)....
bytes 和 bytearray 推介一个片文章 :https://www.cnblogs.com/fieldtianye/p/8276552.html

浙公网安备 33010602011771号