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

   

posted @ 2019-10-26 15:04  不朽_张  阅读(203)  评论(0)    收藏  举报