字符串

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

计算机认识的东西:位(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. zookeeper的使用demo(c#/java)

    Zookeeper 作为一个分布式的服务框架,主要用来解决分布式集群中应用系统的一致性问题,它能提供基于类似于文件系统的目录节点树方式的数据存储,但是 Zookeeper 并不是用来专门存储数据的,它 ...

  2. [TJOI2009]猜数字

    题目描述 现有两组数字,每组k个,第一组中的数字分别为:a1,a2,...,ak表示,第二组中的数字分别用b1,b2,...,bk表示.其中第二组中的数字是两两互素的.求最小的非负整数n,满足对于任意 ...

  3. 安利一个vps,7美元/年。

    黑色星期五.给大家安利一个vps,7美元/年.配置如下:2 个虚拟化 CPU 2 GB (2048 MB) 专属内存 50 GB RAID-10 受保护硬盘存储 3000 GB (3TB) 月流量 1 ...

  4. 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 ...

  5. 父网访问子网(校园网访问校园网IP路由器下的一台电脑)远程路由器下的电脑

    网路由器添加转发规则,端口转发,本人仅使用Pandora Box路由器固件 当然设置了这些还不够,还需要设置其他的允许端口转发的东西,例如 然后远程桌面的话还需要设置某些相关设置,例如电脑允许使用远程 ...

  6. what?iView的DropDown没有element的split-button?提issure?等不及了,自己实现一个

    开始正文之前,有必要先说自己实现这个组件的必要性描述. 话说大家做表格时,增删查改按钮都是放在哪里的?最简单的方式应该是这样: 是不是感觉奇丑无比啊,于是改成了这样: 但是这种操作按钮一多后就没位置放 ...

  7. CentOS-7.3 设置静态 ip

    1. VMnet8 必须设置固定 ip,否则会发生:虚拟机可以访问主机和外网,但是主机 windows 却访问不了虚拟机 2. 虚拟网络编辑器设置网关 IP(G): 必须与 VMnet8 的 ip 在 ...

  8. 第一个SDL程序

    不废话,就WinMain主体: SDL_Window* window = NULL; SDL_Renderer* renderer = NULL; SDL_Event e; bool q = 0; i ...

  9. 2018-2019-2 《网络对抗技术》Exp0 Kali安装 Week1 20165316

    2018-2019-2 <网络对抗技术>Exp0 Kali安装 Week1 20165316 下载 我分别下载了kali-linux-2019.1-i386的镜像文件和kali-linux ...

  10. CAN自收自发问题小结

    2011-12-02 21:59:23 流程图: CAN自收自发问题小结 1,地址如何确定?  答:51的片外扩展地址,R/W脚的电平会根据代码自动更改,不需要设置.    参考 单片机的外部存储器的 ...