字符串

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

计算机认识的东西:位(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. Cocos2dx Android环境编译出错:jni/Android.mk: Cannot find module with tag 'scripting/lua-bindings' in import path

    解决方案为: 在项目proj.android\jni\Android.mk(D:\my_lua_test2\MyluaTest\frameworks\runtime-src\proj.android\ ...

  2. spring boot 整合 百度ueditor富文本

    百度的富文本没有提供Java版本的,只给提供了jsp版本,但是呢spring boot 如果是使用内置tomcat启动的话整合jsp是非常困难得,今天小编给大家带来spring boot整合百度富文本 ...

  3. HTML5培训入门基础知识了解CSS3 3D属性

    CSS3 3D 什么是3d的场景呢? 2d场景,在屏幕上水平和垂直的交叉线x轴和y轴 3d场景,在垂直于屏幕的方法,相对于3d多出个z轴 Z轴:靠近屏幕的方向是正向,远离屏幕的方向是反向 CSS3中的 ...

  4. OO第二次博客作业—17373247

    OO第二次博客作业 零.写在前面 OO第二单元宣告结束,在这个单元里自己算是真正对面向对象编程产生了比较深刻的理解,也认识到了一个合理的架构为编程带来的极大的便利. (挂三次评测分数 看出得分接近等差 ...

  5. 标签EL和JSTL解读

    1. EL标签:出现代替输出:<%=%> EL输出格式(特点:只能输出,不带逻辑)  ${key值} 查找顺序:page,request,session,application **在不加 ...

  6. 启动Weblogic问题集锦

    报错1:Could not obtain the localhost address. The most likely cause is an error in the network configu ...

  7. 算法(第四版)C# 习题题解——2.2

    写在前面 整个项目都托管在了 Github 上:https://github.com/ikesnowy/Algorithms-4th-Edition-in-Csharp 查找更为方便的版本见:http ...

  8. day11函数的参数,函数对象 - 函数名,函数的嵌套调用

    复习 # 什么是函数:具体特定功能的代码块 - 特定功能代码块作为一个整体,并给该整体命名,就是函数 # 函数的优点: # 1.减少代码的冗余 # 2.结构清晰,可读性强 # 3.具有复用性,开发效率 ...

  9. main函数的的两个参数

    C语言中main函数的参数有两个,这两个参数写为argc和argv.因此,main函数的函数头可写为:main(argc,argv);C语言还规定argc(第一个形参)必须是整型变量,argv( 第二 ...

  10. websocket --- 05 . http与websocket

    一.http协议 1.基于 TCP 协议 2.一次请求 一次响应 断开 3.客户端永远处于主动状态 4.服务器永远处于被动状态 5.Http无状态 - 在服务器不保存客户端的信息 6.服务器无法主动找 ...