字符串

文本:屏幕上显示的字符或者其他的记号

计算机认识的东西:位(bit)和字节(byte)

文本的本质:某种字符编码方式保存的内容。

字符编码:一种映射(显示的内容  ----> 内存、磁盘内存储的内容)

编码方式:一种将计算机可读的数字映射成人类可读的字符的解码秘钥。

unicode

1 为任意语言的任意字符设计

2 4字节

3 每个数字代表唯一的符号

4 UTF-32:每1个字符使用4个字节

UTF-16:每1个字符使用2个字节(前65535个字符),空间效率比UTF-32高

5 UTF-32和UTF-16编码方式在不同的计算机系统会以不同的顺序保存字节。(大尾端和小尾端)----> 使用字节顺序标记可解决

6 UTF-8:长度变化的unicode编码系统,使用Bit-Twidding,不同的字符占用不同的字节:

  1 ASCII码:1个字符占用1个字节

  2 中文:1个字符占用3个字节

  3 不常用的“astral plane”:1个字符占用4个字节

所谓Bit-Twiddling,指的就是通过直接操作数据的字节来实现对数据的修改功能。例如,如果我们要将int类型的变量value的值变为原来的两倍,那我们既可以使用语句value *= 2,也可以使用value <<= 1的方法,后者就是Bit-Twiddling,大多数情况下,使用Bit-Twiddling的程序可以运行的更快。

参考文章

https://lfwen.site/2017/02/08/bit-hacking/

字符串

1 字符串可以用单引号或者双引号定义

2 值格式化成字符串:使用占位符将值插入字符串

3 字符串是对象,对象有方法,例如,"abc{0}{1}".format("d","e"),其中{0},{1}叫做替换字段。

格式化字符串

4 深入format()方法

"{0}'s password is {1}".format(username, password) 

{0}和{1} 叫做替换字段,它们是整型替换字段

整型替换字段可以看做是format()方法中的参数列表的位置索引。在上面的例子中,{0}会被第一个参数替换(即 username),{1}被第二个参数替换(即password)

si_suffixes = ['KB', 'MB', 'GB', 'TB', 'PB', 'EB', 'ZB', 'YB']'1000{0[0]} = 1{0[1]}'.format(si_suffixes) 

{0}代表传递给format()方法的第一个参数,即 si_suffixes。注意si_suffixes 是一个列表。所以{0[0]}指代 si_suffixes 的第一个元素,即'KB'。同时,{0[1]}指代该列表的第二个元素,即:'MB'。

通过利用(类似)Python 的语法访问到对象的元素或属性。这就叫做复合字段名。例如列表,字典,模块,类的实例等的访问到元素或属性的方式。以下是一个综合的例子:

import humansize
import sys
'1MB = 1000{0.modules[humansize].SUFFIXES[1000][0]}'.format(sys)

替换域{0}指代 sys 模块。

sys.modules 是一个保存当前 Python 实例中所有已经导入模块的字典。模块的名字作为字典的键;模块自身则是键所对应的值。所以{0.modules}指代保存当前己被导入模块的字典。

sys.modules['humansize']即刚才导入的humansize模块。所以替换域{0.modules[humansize]}指代humansize模块。(注意:在实际的Python代码中,字典sys.modules的键是字符串类型的;为了引用它们,我们需要在模块名周围放上引号(比如 'humansize')。但是在使用替换域的时候,我们在省略了字典的键名周围的引号(比如humansize)。)

sys.modules['humansize'].SUFFIXES 是在 humansize 模块的开头定义的一个字典对象。 {0.modules[humansize].SUFFIXES}即指向该字典。

sys.modules['humansize'].SUFFIXES[1000]是一个 SI(国际单位制)后缀列表对象:['KB', 'MB', 'GB', 'TB', 'PB', 'EB','ZB', 'YB']。所以替换域{0.modules[humansize].SUFFIXES[1000]}指向该列表。

最后可知,sys.modules['humansize'].SUFFIXES[1000][0]即 SI 后缀列表的第一个元素:'KB'。

if size < multiple:
    return '{0:.1f} {1}'.format(size, suffix)

{1}会被传递给 format()方法的第二个参数替换,即 suffix。

{0:.1f} 在替换域中,”的意思是四舍五入,保留一位小数。“f”的意思是定点数(与指数标记法或者其他 10 进制数表示方法相对应)。

其他字符串方法

s.splitlines():输入:多行字符串;输出:一个由字符串组成的列表

s.lower():字符串转换成小写

s.upper():大写转换操作

s.lower().count():输入:字符子串;输出:返回字符串中指定的子串数量

对url参数的处理:

param = username=rui&password=123&address=HK

1 dict([p.split('=', 1) for p in param.split('&')])

2 使用现有库urllib.parse.parse_qs()函数

字符串分片

它类似列表的分片,形如,str[a : b],表示从a位置到(b-1)位置的字符串分片

1 通过指定两个索引值来获得原字符串的一个分片,从0开始

2 可以使用负的索引值,从-1开始

3 str[a: ] == str[a : b]

3 str[ : n]:返回前n个字符,str[n : ]:返回剩余的字符

string和bytes的比较

1 一个不可变(immutable)的Unicode 编码的字符序列叫做 string。

一串由 0 到 255 之间的数字组成的序列(数字序列)叫做 bytes 对象。

2 byte字面值语法:b'',它可以用来定义bytes对象

3 bytes对象不可变。bytes对象转换为bytearray对象(可变的),这样使得可以改变某个字节

4 字符串有内置函数len(),encode(),decode()等,可以使用+操作符(连接操作)

5 bytes和strings是不同类型的数据,不能混合使用,需要转换:

bytes -> strings:str = by.decode(‘'编码格式')(by代表字节,str代表字符串)

strings -> bytes:by = str.encode('编码格式')(by代表字节,str代表字符串)

Python编码

1 Python3的.py文件默认的编码方式是UTF-8

2 可以通过代码方式改变编码方式

#!/usr/bin/python3
# -*- coding:big5 -*-

参考文档:

dive into python 3

python372.chm

python 学习笔记 5 ----> dive into python 3的更多相关文章

  1. python 学习笔记 4 ----> dive into python 3

    解析 列表解析.字典解析.集合解析 浏览本地文件系统的模块: 1 os 2 os.path 3 glob os模块:获取(和修改)本地目录.文件进程.环境变量等信息 os.path模块:包含了操作路径 ...

  2. python 学习笔记 3 ----> dive into python 3

    Python内置数据类型 注意: Python可以不需要声明变量的数据类型.它是根据变量的初始赋值情况分析数据类型,并在内部跟踪变量. 比较重要的数据类型: 1 布尔型(Booleans):True. ...

  3. python 学习笔记 2 ----> dive into python 3

    Python Shell idle的使用 >>> >>>help() ----> help> 可以在help这个工具中查找Python内置函数的文档等等 ...

  4. python学习笔记:安装boost python库以及使用boost.python库封装

    学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...

  5. [Python学习笔记][第七章Python文件操作]

    2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...

  6. [Python学习笔记][第五章Python函数设计与使用]

    2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...

  7. [Python学习笔记][第四章Python字符串]

    2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...

  8. Python学习笔记:第一天python基础

    目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据类型 6. 输入 7. if语句 1. python简介 python是在198 ...

  9. Python学习笔记(四)Python程序的控制结构

    在学习了 Python 的基本数据类型后,我们就要开始接触Python程序的控制结构,了解 Python 是如何使用控制结构来更改程序的执行顺序以满足多样的功能需求.如果有的小伙伴在之前学过C语言,j ...

随机推荐

  1. Windows 10,鼠标右键-发送到-桌面快捷方式缺失解决方法

    1-双击“我的电脑”. 进到这里 2-路径框修改为“shell:Sendto”,回车. 3-把“桌面快捷方式”黏贴到Sendto文件夹下

  2. SpringMVC常见面试题总结

    1.什么是Spring MVC ?简单介绍下你对springMVC的理解? Spring MVC是一个基于MVC架构的用来简化web应用程序开发的应用开发框架,它是Spring的一个模块,无需中间整合 ...

  3. Django中上传图片---避免因图片重名导致被覆盖

    上一篇文章中(https://www.cnblogs.com/lutt/p/10640412.html),我们以图片文件夹+图片名字的方式来储存图片,这样的做法会导致有重名的图片会导致之前的图片被覆盖 ...

  4. insert into TABLE by SELECT ...

    insert into isp_rmi3 ( select r.id, r.blue_id, r.sell_channel,NULL, r.interface_id, NULL, NULL, r.ur ...

  5. Fetch和ajax的比较和区别

    传统 Ajax 已死,Fetch 永生   Ajax 不会死,传统 Ajax 指的是 XMLHttpRequest(XHR),未来现在已被 Fetch 替代. 最近把阿里一个千万级 PV 的数据产品全 ...

  6. C#返回字符串的字节长度,一个中文算两个字符的代码

    如下代码段是关于C#返回字符串的字节长度,一个中文算两个字符的代码. public static int GetLength(string str) { if (str.Length == 0) re ...

  7. Redis的持久化

    Redis的持久化有两种方式: RDB方式(默认支持):在指定的时间间隔内将内存中的数据集快照写入磁盘 优势 整个Redis数据库将只包含一个文件,对于文件备份来说是完美的,系统出现灾难性的故障时容易 ...

  8. TeamViewer连CentOS

    用过TeamViewer的人都会感叹其远程连接的强大,昨天有将Windows和CentOS在同一网段内互相连接打通了,今天在外网环境下突然想到是否可以用TeamViewer在外网环境下连到CentOS ...

  9. Path Analyzer Pro出现raw socket问题

    使用windows7,8以及10平台运行一个traceroute liketools软件,名为Path Analyzer Pro 2.7,遇到raw socket问题,如图: 原因是raw socke ...

  10. 推荐!PlayGround:可视化神经网络

    https://cloud.tencent.com/developer/news/190352 http://playground.tensorflow.org PlayGround是一个在线演示.实 ...