一、文字转二进制
1、把#Alex 按照ASCII表转成二进制形式
2、计算机如何分清哪段代表#,哪段是代码A
二、计算机容量单位
由于字符串长的长,短的短,难以分清每个字符的起止位置,既然ASCII一共是255个字符,那么最长的也不过是11111111八位,不如把所有二进制
转换成8位的,不足的用0来代替。
每一位0或者1所占的空间单位为bit(比特),这是计算机中最小的表示单位
三、字符编码
为了解决每个国家不同编码间不互通的问题,ISO标准组织出马!
Unicode编码:国际标准字符集,他将世界各种语言的每个字符定义一个唯一的编码,以满足跨语言、跨平台的文本信息转换。Unicode(统一码、万国码)规定所有的字符和符号最少由16位来表示(2个字节),即2**16=65536;
UTF-8,是对Unicode编码的压缩和优化,他不在使用最少使用2个字节,而是将所有的字符和符号进行分类:asci码中的内容用1个字节、欧洲的字符用2个字节保存,东亚的字符用三个字节保存;
windows系统中文版默认的编码是GBK
Mac OS \ Linux 系统默认的编码是UTF8
Python 2.x默认编码是ASCII
Python 3.X默认编码是UTF-8
四、浮点数
浮点数是属于有理数中某特定子集的数的数字的表示,在计算机中用以近似表示任意某个实数。具体的说,这个实数由一个整数或定点数(即尾数)诚意某个基数的整数次幂得到的(10**4,10为基数),这种表示方法类似于基数为10的科学计数法。
五、浮点精确度问题
整数的浮点数在计算机内部存储的方式是不同的,整数运算永远是精确的而浮点数或运算则可能会有四舍五入的误差。
Python默认的是17位精度,也就是小数点后面16位,但是这个精度确是越往后越不准的。这个问题不是指存在python中,其他语言也有同样的问题。
原因与浮点数存储结构有关。
计算高精确度的浮点数方法
六、数据类型-列表
七、元组
元组其实跟列表差不多,也是存一组数。只不是它一旦创建,便不能再修改,所以又叫只读列表;
特性:不可变 元组本身不可变,如果元组中还包含其可变元素,这些可变元素可以改变
功能:index,count,切片
使用场景:1、显示的告知别人,此处数据不可以修改 2、数据库连接配置信息等
names=("alex",["jack","100"],"eruc") print(names[1]) names[1][1]="aa" #内存地址不可以修改,内存地址指向的值可以变 print(names[1])
输出结果
['jack', '100']
['jack', 'aa']
八、hash函数
Hash,一般翻译做“散列”,就是把任意长度的输入,通过散列算法,变成固定长度的输出,该输出就是散列值。这种转换是一种压缩映射,也就是,散列值的空间通常远小于输入的空间,不同的输入可能会散列成相同的输出,所以不可能从散列值来唯一的确认输入值。简单的说就是一种将任意长度的笑嘻嘻压缩到某一固定长度的消息摘要的函数。
特征:hash值的计算过程依据这个值的一些特征计算的,这就要求被hash的值必须固定,因此被hash的值必须是不可以变的;
用途:文件签名,md5加密,密码验证
print(hash('test'))
九、字典
如何在一个变量里存储公司每个员工的个人信息?
字典一种key -value 的数据类型,使用就像我们上学用的字典,通过笔画,字母查对应页的详细内容。
特性:
key-value结构
key必须可hash、且必须为不可变数据类型、必须唯一
可存放任意多个值、可修改、可以不唯一
无序
查找速度快,通过hash把所有数值转成成数字,从小到大排序,对排好序的数值折半对比查找。如果有M个数据,最多查找n次,2^n=M;
1、查找
2、删除
info={ 'user1':"Zhang San", 'user2':"Li Si", 'user3':"Wang Er", 'user4':"Ma Zi", }
info.pop('user1') #指定删除 print(info) info.popitem() #随机删除 print(info)
3、多级字典嵌套
address_list = { "student1":{"姓名":["张三"], "性别":["女"], "年龄":["18"], "手机":["13100881001"] }, "student2":{"姓名":["李四"], "性别":["男"], "年龄":["20"], "手机":["13100881002"] }, "student3":{"姓名":["王二"], "性别":["男"], "年龄":["28"], "手机":["13100881003"] } } print(address_list["student2"]["年龄"])
4、update合并
#update 合并列表,如果发现相同的key,合并之后会替换调之前的key test1={ "student1":{"姓名":["小明"], "性别":["男"], "年龄":["30"], "手机":["123456789"] } } address_list.update(test1) print(address_list)
5、setdefault ,如果有这个key就去获取这个值,没有这个key就是设置这个值
address_list.setdefault('student4',2) #当在字典里面查找到没有student4的key时,会添加到字典最后。 print(address_list) 输出: {'student1': {'姓名': ['小明'], '性别': ['男'], '年龄': ['30'], '手机': ['123456789']}, 'student2': {'姓名': ['李四'], '性别': ['男'], '年龄': ['20'], '手机': ['13100881002']}, 'student3': {'姓名': ['王二'], '性别': ['男'], '年龄': ['28'], '手机': ['13100881003']}, 'student4': 2}
5、fromkeys
fromkeys() 方法用于创建一个新的字典,并以可迭代对象中的元素分别作为字典中的键,且所有键对应同一个值,默认为None。
6、循环
info={1:2,2:3,3:4,4:5} >>> for k in info: print(k,info[k]) 1 2 2 3 3 4 4 5