python 学习笔记 5 ----> dive into python 3
字符串
文本:屏幕上显示的字符或者其他的记号
计算机认识的东西:位(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的更多相关文章
- python 学习笔记 4 ----> dive into python 3
解析 列表解析.字典解析.集合解析 浏览本地文件系统的模块: 1 os 2 os.path 3 glob os模块:获取(和修改)本地目录.文件进程.环境变量等信息 os.path模块:包含了操作路径 ...
- python 学习笔记 3 ----> dive into python 3
Python内置数据类型 注意: Python可以不需要声明变量的数据类型.它是根据变量的初始赋值情况分析数据类型,并在内部跟踪变量. 比较重要的数据类型: 1 布尔型(Booleans):True. ...
- python 学习笔记 2 ----> dive into python 3
Python Shell idle的使用 >>> >>>help() ----> help> 可以在help这个工具中查找Python内置函数的文档等等 ...
- python学习笔记:安装boost python库以及使用boost.python库封装
学习是一个累积的过程.在这个过程中,我们不仅要学习新的知识,还需要将以前学到的知识进行回顾总结. 前面讲述了Python使用ctypes直接调用动态库和使用Python的C语言API封装C函数, C+ ...
- [Python学习笔记][第七章Python文件操作]
2016/1/30学习内容 第七章 Python文件操作 文本文件 文本文件存储的是常规字符串,通常每行以换行符'\n'结尾. 二进制文件 二进制文件把对象内容以字节串(bytes)进行存储,无法用笔 ...
- [Python学习笔记][第五章Python函数设计与使用]
2016/1/29学习内容 第四章 Python函数设计与使用 之前的几页忘记保存了 很伤心 变量作用域 -一个变量已在函数外定义,如果在函数内需要修改这个变量的值,并将这个赋值结果反映到函数之外,可 ...
- [Python学习笔记][第四章Python字符串]
2016/1/28学习内容 第四章 Python字符串与正则表达式之字符串 编码规则 UTF-8 以1个字节表示英语字符(兼容ASCII),以3个字节表示中文及其他语言,UTF-8对全世界所有国家需要 ...
- Python学习笔记:第一天python基础
目录 1. python简介 2. python的安装 3. 编写第一个helloword 4. 变量和常量 5. 数据类型 6. 输入 7. if语句 1. python简介 python是在198 ...
- Python学习笔记(四)Python程序的控制结构
在学习了 Python 的基本数据类型后,我们就要开始接触Python程序的控制结构,了解 Python 是如何使用控制结构来更改程序的执行顺序以满足多样的功能需求.如果有的小伙伴在之前学过C语言,j ...
随机推荐
- zookeeper的使用demo(c#/java)
Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它 ...
- [TJOI2009]猜数字
题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...
- 安利一个vps,7美元/年。
黑色星期五.给大家安利一个vps,7美元/年.配置如下:2 个虚拟化 CPU 2 GB (2048 MB) 专属内存 50 GB RAID-10 受保护硬盘存储 3000 GB (3TB) 月流量 1 ...
- CentOS 7 Nginx1.12.2平滑升级到新版本nginx-1.13.3
查看当前Nginx版本信息 [root@web ~]# /usr/local/nginx/sbin/nginx -V nginx version: nginx/ built by gcc (Red H ...
- 父网访问子网(校园网访问校园网IP路由器下的一台电脑)远程路由器下的电脑
网路由器添加转发规则,端口转发,本人仅使用Pandora Box路由器固件 当然设置了这些还不够,还需要设置其他的允许端口转发的东西,例如 然后远程桌面的话还需要设置某些相关设置,例如电脑允许使用远程 ...
- what?iView的DropDown没有element的split-button?提issure?等不及了,自己实现一个
开始正文之前,有必要先说自己实现这个组件的必要性描述. 话说大家做表格时,增删查改按钮都是放在哪里的?最简单的方式应该是这样: 是不是感觉奇丑无比啊,于是改成了这样: 但是这种操作按钮一多后就没位置放 ...
- CentOS-7.3 设置静态 ip
1. VMnet8 必须设置固定 ip,否则会发生:虚拟机可以访问主机和外网,但是主机 windows 却访问不了虚拟机 2. 虚拟网络编辑器设置网关 IP(G): 必须与 VMnet8 的 ip 在 ...
- 第一个SDL程序
不废话,就WinMain主体: SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; SDL_Event e; bool q = 0; i ...
- 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165316
2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165316 下载 我分别下载了kali-linux-2019.1-i386的镜像文件和kali-linux ...
- CAN自收自发问题小结
2011-12-02 21:59:23 流程图: CAN自收自发问题小结 1,地址如何确定? 答:51的片外扩展地址,R/W脚的电平会根据代码自动更改,不需要设置. 参考 单片机的外部存储器的 ...