一:常量字符串

  常量字符串用起来相对简单,也许最复杂的事情就是在代码中有如此多的方法来编写它们。

  eg:单引号:'spam"m'   , 双引号: “spa'm” , 三引号:‘’‘... spam ...'''或者 “”“... spam ..."""。

    转义字符:”s\tp\na\0m“

    Raw字符串:r"C:\new\test.spm"

    Python3.0 中的Byte字符串:b'so\x01am'

    python2.6 中的Unicode字符串: u'eggs\u0020spam'

Note:在python中,单引号和双引号是可以互换的。之所以这样做,是因为我们可以不使用反斜杠转义字符就可以实现一个字符串中包含其余种类的引号。当然也可以使用反斜杠转义字符去嵌套引号。

>>>'knight"s',"knight's"   #不用转义字符的引号的相互使用
(knight"s,knight's)

另外,python 自动在任意的表达式中合并相邻的字符串常量,尽管可以用‘+’操作符来明确表示这是一个合并操作。

>>>title = "Meaning " 'of' "Life"   #Implicit concatenation
>>>title
'Meaning of Life'

Note:这些字符串之间增加逗号会创建一个元祖,而不是一个字符串。并且python 倾向于打印单引号,除非字符串内已经有了单引号了。

1,用转义字符序列代表特殊字节:反斜杠用来引入特殊的字节编码,是转义序列。在交互模式下是以转义字符的形式回显的,但是print会将其解释出来:

>>>s
'a\nb\tc'
>>>print(s)
a
b c

需要注意的是在用转义字符时,\xhh 表示16进制数字,即\x之后只能跟两个数字(0-F);\ooo 表示八进制数字,即之后可以跟三个数字(0-7);在看一个字符串长度时有用。

Note:python 中,空字符不会像C语言那样去结束一个字符串。相反,Python 在内存中保持了整个字符串的长度和文本。事实上,python 没有字符会结束一个字符串。另外,python 以十六进制显示非打印的字符。

>>>s = '\001\002\0x03'
>>>s
'\x01\x02\x03' #十六进制显示
>>>len(s)
3

如果Python 没有作为一个合法的转义编码识别出在‘\’ 后的字符,它就直接在最终的字符串中保留反斜杠。

>>>x = "C:\py\code"
>>>x
'C:\\py\\code' #显示结果为\\,避免字符转义情况的发生
>>>len(x)
10

Note:除非你能记住所有的转义字符列表,才不会出现这种现象。如果希望编写明确的常量反斜杠,重复两个"\\" 或者使用raw 字符串是个不错的选择。

2,raw 字符串抑制转义:

  Python 新手有时会像下面这样打开一个文件: myfile = open('C:\new\text.dat','w')  但是这里有些问题,“\n”,"\t" 在字符串中会被当作转义字符处理,这也是使用 raw 所要解决的问题。如果r(大小写均可以)出现在字符串的第一个引号的前面,它将会关闭字符转义机制。因此为了避免这种文件名的错误,记得在windows中增加字母r:

一种解决方法:myfile = open(r'C:\new\text.dat','w'')

另一种解决方法: myfile = open('C:\\new\\text.dat','w')

3,三重引号编写多行字符串块:

  这是一种对编写多行文本数据来说很便捷的语法。但是在特定的地方会起到注释作用,即注释多行代码。

二:实际应用中的字符串:

1,基本操作:

  字符串可以通过“+”进行合并并且可以通过“ * ”进行重复。

2,索引和分片:

  字符串定义为字符的有序集合,所以我们能够通过其位置获得他们的元素。在pyhton 中,字符串中的元素是通过索引来提取的。并且python 和C语言一样,字符的偏移量是从0开始的,上界比字符串的长度小1.并且支持负偏移。偏移值为-1表示为这个字符串的最后一个元素的位置。从技术上讲,一个负偏移与这个字符串的长度相加后得到这个字符串的正偏移。所谓分片,其实是索引的一个扩展,即返回的不是一个字符串元素,而死一个子字符串。分片可以用于提取部分数据,分离出前后缀等。

  在分片时,左边的偏移量作为下边界(包含下边界在内),而右边的偏移作为上边界(不包含上边界在内)。并返回一个包含了所获取元素的新的对象。二哥:

  --s[i : j] 提取对应的部分作为一个序列:

  --分界的边界默认为0和序列的长度,如果没有明确给出的话

  --s[ : ] 获取了从偏移0到末尾之间的元素,这有效地实现了顶层 s 的拷贝。Note:一个有相同值,但是是不同内存片区的对象。

  --s[ : -1] 不包括最后一个元素

3,扩展分片:第三个限制值

  python 分片表达式增加了一个可选的第三个索引,用作步进。所以分片的形式变成:X[I : J : K],即每隔K个元素索引一次。K 默认为1。可以使用负数作为步进,步进-1表示分片将会从右到左进行而不是通常的从左到右。实际效果就是将序列进行反转:

>>>s = 'hello'
>>>s[ : : -1]
'olleh'
>>>
>>>
>>>s = 'abcedfg'
>>>s[5:1:-1] #以反转的顺序获得从2到5的元素
'fdec'

通过一个负数步进,两个边界的意义实际上进行了反转。之外,其实分片等同于用一个分片对象进行索引。

>>>'spam'[1 : 3]
'pa'
>>>'spam'[slice(1,3)]
'pa'
>>>
>>>'spam'[ : :-1]
'maps'
>>>'spam'[slice(None,None,-1)]
'maps'

view code

Note:为了去掉换行字符常常推荐采用line.rstrip()方法,因为这个调用将会留下没有换行字符那行的最后一个字符。

4,字符串转换工具:

  int 函数将字符串转换为数字,而str 函数将数字转换为字符串表达形式。这两个也是通用的指定转换工具。类似的,float 函数也可以将字符串转换成浮点数(类似于 int 函数)。

5,字符串代码转换:

  同样是转换,单个字符也可以通过将其传递给内置函数ord(),转换成对应的ASCII码,而chr()函数将会执行相反的操作。这些工具也可以用来执行一种基于字符串的数学运算:

>>>s = ''                     #字符串的数字运算
>>>s = chr(ord(s) + 1)
>>>s
''
>>>ord('') - ord('') #字符串转换为整数
5

6,修改字符串:

  字符串为不可变序列,不能原地修改一个字符串,如果需要改变一个字符串,则需要对进行变化的原字符串赋值给一个新的字符串,并用原字符串的名字来命名。

>>>s = 'spam'
>>>s[0] = 'x'
TypeError: 'str' object does not support item assignment
 

  

五:python 对象类型详解二:字符串(上)的更多相关文章

  1. 六:python 对象类型详解二:字符串(下)

    一:字符串方法: 方法就是与特定对象相关联在一起的函数.从技术的角度来讲,它们是附属于对象的属性,而这些属性不过是些可调用的函数罢了.Python 首先读取对象方法,然后调用它,传递参数.如果一个方法 ...

  2. 三:python 对象类型详解一:数字(上)

    一:python 的数字类型: a)整数和浮点数 b)复数 c)固定精度的十进制数 d)有理分数 e)集合 f)布尔类型 g)无穷的整数精度 h)各种数字内置函数和模块 二:各种数字类型的详解 1,数 ...

  3. 十:python 对象类型详解六:文件

    一:文件 1.简介:内置open 函数会创建一个python 文件对象,可以作为计算机上的一个文件链接.在调用open 之后,可以通过调用返回文件对象的方法来读写相关外部文件.文件对象只是常见文件处理 ...

  4. 四:python 对象类型详解一:数字(下)

    一:位操作 除了一般的数学运算,python也支持c语言中的大多数数学表达式.这包括那些把整数当作二进制位串对待的操作.例如,还可以实现位移及布尔操作: >>> x = 1 > ...

  5. 七:python 对象类型详解三:列表

    一:列表简介: 1,列表可以包含任何种类的对象:数字.字符串甚至集合对象类型.列表都是可变对象,它们都支持在原处修改的操作,可以通过指定的偏移量和分片.列表方法调用.删除语句等方法来实现.关键的作用有 ...

  6. 九:python 对象类型详解五:元组

    一:元组: 1,简单介绍:元组由简单的对象组构成.元组与列表非常类似,只不过元组不能在原处修改(它们)是不可变的,并且通常写成圆括号中的一系列项.虽然元组不支持任何方法调用,但元组具有列表的大多数属性 ...

  7. 八:python 对象类型详解四:字典

    一:字典通识: 1,字典通过键而不是偏移量来读取: 2,字典是任意对象的无序集合: 3,字典可变长.异构.任意嵌套: 4,字典属于可变映射类型: 5,对象引用表(散列表): 二:实际应用中的字典: 1 ...

  8. C++11 并发指南六( <atomic> 类型详解二 std::atomic )

    C++11 并发指南六(atomic 类型详解一 atomic_flag 介绍)  一文介绍了 C++11 中最简单的原子类型 std::atomic_flag,但是 std::atomic_flag ...

  9. ECMAScript---object对象类型详解

    普通对象:由大括号包裹起来的,由零到多个属性名和属性值(键值对)组成的 那什么是属性呢? 属性:描述当前对象特征的,属性名是当前具备这个特征,属性值是这个特征的描述(专业语法,属性名称为键[key], ...

随机推荐

  1. (1)Linux操作系统的安装

    1.安装Vmware Workstation 如何判断Vmware是否安装成功? 我的电脑控制面板 --> 网络和Internet --> 查看网络状态和任务 --> 更改适配器设置 ...

  2. django之block extend标签

    class ExtendsNode(Node): must_be_first = True context_key = 'extends_context' def __init__(self, nod ...

  3. DDD随笔-Axon

    1. 命令处理程序从存储库中检索域对象(聚合)并执行它们的方法来更改它们的状态.这些聚合通常包含实际的业务逻辑,因此负责维护自己的状态.聚合的状态变化导致产生领域事件.领域事件和聚合形成领域模型. 2 ...

  4. 10.Linux 管道

    简单地说,一个通道接受一个工具软件的输出,然后把那个输出输入到其它工具软件.使用UNIX/Linux的词汇,这个通道接受了一个过程的标准输出,并把这个标准的输出作为另一个过程的标准输入.如果你没有重新 ...

  5. tensorflow实战系列(一)

    最近开始整理一下tensorflow,准备出一个tensorflow实战系列,以飨读者. 学习一个深度学习框架,一般遵循这样的思路:数据如何读取,如如何从图片和标签数据中读出成tensorflow可以 ...

  6. day23-类的封装

    1.封装 封装,顾名思义就是将内容封装到某个地方,以后再去调用被封装在某处的内容.所以,在使用面向对象的封装特性时,需要:1)将内容封装到某处2)从某处调用被封装的内容 第一步:将内容封装到某处 cl ...

  7. Spring boot 注册Filter , Listener, Servlet

    1: ServletRegistrationBean   Servlet @Bean public ServletRegistrationBean myServlet(){ ServletRegist ...

  8. css3-animate

    常用动画设置: effect easing duration  effect: <select name="effects" id="effectTypes&quo ...

  9. 初识web.xml文件

    做了那么久的web项目都没有花心思了充分解下这个文件有什么用,看项目配制是否都差不多呢 ======================================================== ...

  10. es6 初级之---const 和 默认参数

    1. const 的定义: 1.1 常量定义的时候要赋值,不赋值是会报错的: <!DOCTYPE html> <html lang="en"> <he ...