Python学习-字符编码, 数据类型
本篇主要内容:
- 字符编码
- Python中的数据类型有哪些
- 类型的一些常用操作及方法
一、字符编码
编码解释的大部分内容摘自廖雪峰老师教程中的讲解,点击跳转。
简单介绍:
我们知道计算机只能处理数字,如果要处理文本,就必须先把文本转换为数字才能处理。最早的计算机在设计时采用8个比特(bit)作为一个字节(byte),所以,一个字节能表示的最大的整数就是255(二进制11111111=十进制255),如果要表示更大的整数,就必须用更多的字节。比如两个字节可以表示的最大整数是。
由于计算机是美国人发明的,因此,最早只有127个字符被编码到计算机里,也就是大小写英文字母、数字和一些符号,这个编码表被称为ASCII编码,比如大写字母A的编码是65,小写字母z的编码是122。
但是要处理中文显然一个字节是不够的,至少需要两个字节,而且还不能和ASCII编码冲突,所以,中国制定了GB2312编码,用来把中文编进去。
我们知道,世界上有多种语言,为了支持本国的语言,都需要各自编制一套编码;那么问题就出现了,由于每一种语言有自己的标准,在多语言混合的文本中,显示出来就会乱码。因此,Unicode就应运而生了。Unicode把所有语言都统一到一套编码里,这样就不会再有乱码问题了。
Unicode最常用的是用两个字节表示一个字符(如果要用到非常偏僻的字符,就需要4个字节)。现代操作系统和大多数编程语言都直接支持Unicode。
ASCII编码是用1个字节表示一个字符,而Unicode编码通常是用2个字节表示一个字符。假如我们写的文档中,都是英文字母,用Unicode编码比ASCII编码需要多一倍的存储空间,在存储和传输上就十分不划算。因此,又出现了把Unicode编码转化为“可变长编码”的UTF-8编码。
UTF-8编码把一个Unicode字符根据不同的数字大小编码成1-6个字节,常用的英文字母被编码成1个字节,汉字通常是3个字节,只有很生僻的字符才会被编码成4-6个字节。
搞清楚了ASCII、Unicode和UTF-8的关系,我们就可以总结一下现在计算机系统通用的字符编码工作方式:
在计算机内存中,统一使用Unicode编码,当需要保存到硬盘或者需要传输的时候,就转换为UTF-8编码。
用记事本编辑的时候,从文件读取的UTF-8字符被转换为Unicode字符到内存里,编辑完成后,保存的时候再把Unicode转换为UTF-8保存到文件:

浏览网页的时候,服务器会把动态生成的Unicode内容转换为UTF-8再传输到浏览器:

所以你看到很多网页的源码上会有类似<meta charset="UTF-8" />的信息,表示该网页正是用的UTF-8编码。
总结:
1、ASCII 8bit 1个字节(byte)
2、GBK 16bit 2个字节
3、Unicode 32bit 4个字节
4、Utf-8(针对Unicode的可变长度字符编码)
(1)英文字符 8bit 1个字节
(2)汉字 24bit 3个字节
(3)生僻的字符 4-6字节
注意:
Python2中默认的字符编码是ascii码。
Python3目前默认的编码是utf-8。
~ python ✔ 14:41:19
Python 2.7.15 (default, Jun 17 2018, 13:05:56)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'ascii'
>>> exit()
~ python3 ✔ 15:42:29
Python 3.6.5 (default, Jun 17 2018, 12:26:58)
[GCC 4.2.1 Compatible Apple LLVM 9.0.0 (clang-900.0.39.2)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import sys
>>> sys.getdefaultencoding()
'utf-8'
二、Python中的数据类型
1、int 整形
2、bool 布尔
3、str 字符串(不可变)
4、list 列表
5、tuple 元组(不可变)
6、dict 字典
7、set 集合
三、各种类型的一些常用操作及方法
1. int 一些数学运算省略不介绍了(加减乘除,取余,地板除等)
bit_length() 整形的二进制位数(长度)
>>> a = 5
>>> a.bit_length()
3
2. bool
bool(object) # 返回对象的真假(True or False)
什么样的对象时False呢?
None,空对象('', [], (), {}, set()),即空的字符串、列表、元组、字典、集合都为False。这里需要注意 ' ' ,含有空格的字符串,值为True。
排除以上False的对象,其他都是True。
3. 字符串
3.1 索引切片
索引:下表从0开始
切片:str[起始位置:结束位置:步长] 结果不包括结束位置索引处元素,步长可以是正数,可以是负数。
s = 'hello world' print(s[0:5])
print(s[0:5:2])
print(s[5:0])
print(s[5:0:-1])
print(s[-1:-6:-1]) # 输出结果
hello
hlo olle
dlrow
[Finished in 0.1s]
'''
对于步长为负数的情况,我经常搞混,这里说一下我个人的理解。
1. 步长为正数,从左向右取
1.1 起始位置索引处的值先出现(先出现是指相对结束位置索引处的值靠左),可以取到值。
1.2 如果起始位置索引处的值后出现,取不到值
步长为负数,想取到值:起始位置索引 < 结束位置索引
2. 步长为负数,从右向左取
2.1 起始位置索引处的值后出现,可以取到值。
2.2 如果起始位置索引处的值先出现,取不到值
步长为负数,想取到值:起始位置索引 > 结束位置索引
'''
3.2 字符串操作
常用:
1. capitalize # 字符串首字母大写
2. title # 字符串中被特殊字符分隔的部分,每部分首字母大写(中文也被当作特殊字符处理)
3. upper # 字符串中小写字母变大写
4. lower # 字符串中大写字母变小写
5. strip # 去掉字符串首尾空格,也可以自己指定字符
6. replace # 字符替换
7. split # 使用字符串中的指定符号分割字符串,以列表形式返回结果
8. find # 查找,返回匹配部分的第一个字符的索引位置;匹配不到,返回-1
9. len # 返回字符串长度
实例:
s = 'say hEllo woRld' print(s.capitalize()) #Say hello world
print(s.title()) #Say Hello World
print(s.upper()) #SAY HELLO WORLD
print(s.lower()) #say hello world
print(' hello world '.strip()) #hello world
print(s.replace('say', 'speak')) #speak hEllo woRld
print(s.split()) #['say', 'hEllo', 'woRld']
print(s.find('hE')) #
print(s.find('H')) #-1
print(len(s)) #
不常用:
1. swapcase # 大小写互相转换,字符串中大写变小写,小写变大写
2. lstrip # 去掉左边空格
3. rstrip # 去掉右边空格
4. casefold # 字符串中大写字母变小写,与lower类似(很少使用);lower对某些字符支持不够好,casefold对所有字符都有效
实例:
s = 'say hEllo woRld' print(s.swapcase())
print(' hello world '.lstrip())
print(' hello world '.rstrip()) # 输出结果
SAY HeLLO WOrLD
hello world
hello world
列表,元组,字典下篇文章介绍。
------以上是第三、四天的学习内容------
Python学习-字符编码, 数据类型的更多相关文章
- Python学习-字符编码浅析
1.什么是字符编码 既然是简述那肯定是简单明了.字符编码,看名字就是一种字符的编码格式,由于计算机内部采用二进制,想要将人类的语言字符输入到计算机就需要一种编码格式,这就是字符编码.字符------- ...
- 第2章 Python基础-字符编码&数据类型 字符编码&字符串 练习题
1.简述位.字节的关系 位(bit)是计算机中最小的表示单元,数据传输是以“位”为单位的,1bit缩写为1b 字节(Byte)是计算机中最小的存储单位,1Byte缩写为1B 8bit = 1Byte ...
- 第2章 Python基础-字符编码&数据类型 购物车&多级菜单 作业
作业 一.三级菜单 数据结构: menu = { '北京':{ '海淀':{ '五道口':{ 'soho':{}, '网易':{}, 'google':{} }, '中关村':{ '爱奇艺':{}, ...
- 第2章 Python基础-字符编码&数据类型 综合 练习题
1.转换 将字符串s = "alex"转换成列表 s = "alex" s_list = list(s) print(s_list) 将字符串s = " ...
- 第2章 Python基础-字符编码&数据类型 列表&元祖 练习题
1.创建一个空列表,命名为names,往里面添加old_driver,rain,jack,shanshan,peiqi,black_girl元素 names = ["old_driver&q ...
- 第2章 Python基础-字符编码&数据类型 字典 练习题
1.写代码,有如下字典,按照要求实现每一个功能,dic = {'k1':'v1','k2':'v2','k3':[11,22,33]} 请循环输出所有的 key dic = {'k1':'v1','k ...
- Python常见字符编码间的转换
主要内容: 1.Unicode 和 UTF-8的爱恨纠葛 2.字符在硬盘上的存储 3.编码的转换 4.验证编码是否转换正确 5.Python bytes类型 前 ...
- Python基础-字符编码与转码
***了解计算机的底层原理*** Python全栈开发之Python基础-字符编码与转码 需知: 1.在python2默认编码是ASCII, python3里默认是utf-8 2.unicode 分为 ...
- Python的字符编码
Python的字符编码 1. Python字符编码简介 1. 1 ASCII Python解释器在加载.py文件的代码时,会对内容进行编码,一般默认为ASCII码.ASCII(American St ...
随机推荐
- 良许 | 命令的输出不会保存?居然连 tee 命令都不会用!
很多情况下,我们需要保存程序/命令的输出到本地,常用的一种方法是重定向,这也是一种很好的方法.但有个问题,如果你想要做后续操作,比如要统计输出的行数等,重定向就有困难了. 这时候,tee 命令就派上用 ...
- js 前端实现打印功能
// 此处是一个打印的方法 可以在点击事件的时候调用 dayin = () =>{ // 获取当前页面要打印的内容 // 这里的className(‘print’)是我给要打印的区域起的 ...
- C/C++ 修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析
修改系统时间,导致sem_timedwait 一直阻塞的问题解决和分析 介绍 最近修复项目问题时,发现当系统时间往前修改后,会导致sem_timedwait函数一直阻塞.通过搜索了发现int sem_ ...
- 微擎 人人商城 对接京东vop 对接京东商品,同步商品 地址,库存,价格,上下架等。(二) 设置后台管理界面
昨天提到了,由于vop商品池未开通,故对接工作只能暂缓,现在要做一个专门针对vop商品的后台管理, 老规矩,先上设计链路图 因为后台本来就是有比较完善的商品管理系统, 所以我们只是针对vop 进行简单 ...
- vmware中设置ubuntu静态ip
概括一下过程中遇到的三个问题: 1.如何修改虚拟机为静态ip并且生效 2.设置完静态ip后,无法上网 3.设置完静态ip且能上网后,宿主机无法ping通虚拟机 问题1:参考https://www.ji ...
- 2018宁夏邀请赛 Continuous Intervals(单调栈 线段树
https://vjudge.net/problem/Gym-102222L 题意:给你n个数的序列,让判断有几个区间满足排完序后相邻两数差都不大于1. 题解:对于一个区间 [L,R],记最大值为 m ...
- Educational Codeforces Round 48 D Vasya And The Matrix
EDU #48 D 题意:给定一个矩阵,已知每一行和每一列上数字的异或和,问矩阵上的数字是多少,不存在则输出NO. 思路:构造题,可以考虑只填最后一行,和最后一列,其中(n,m)要特判一下.其他格子给 ...
- 【赛后总结+部分题解】2019中国大学生程序设计竞赛(CCPC) - 网络选拔赛
赛后总结: T:今天状态一般,甚至有点疲惫.然后12点比赛开始,和队友开始看题,从最后往前面看,发现数学题公式看不懂.然后发现队友已经双开做1001和1006了,我看着1007有人A,开始做1007. ...
- codeforces 361 C. Levko and Array Recovery(暴力+思维)
题目链接:http://codeforces.com/contest/361/problem/C 题意:对一个数列有这么两个操作 1.(1,l,r,p)..将区间[l,r]所有数都加上p 2.(2,l ...
- 编码神器Lombok,学会后开发效率至少提高一倍!
Lombok会利用注解自动生成javaBean中的getter.setter.equals.toString等一系列方法,大大提供开发效率,本文详细介绍下Lombok的安装及使用. 本文目录 一.Lo ...