小知识点

来源:互联网 发布:森田淘宝旗舰店 编辑:程序博客网 时间:2024/06/01 21:28

小知识点

python2 python3的区别

一:编码

  1. python2默认编码方式为ascii码
  2. python3默认编码方式为utf-8

在python2中显示中文的方法

​ 在首行 添加 # -- encoding:utf-8 - -

二、长整形 long

在python3中不在有long类型,全是int

三:print

python2.7 中 print可加括号也可以不加

print('asd')print 'asd'

python3 中 print必须加括号

print('asd)

四 range

python2 中有 range 和xrange(这是一个生成器)

python3 中 只有range

五 input

python2 raw_input

python3 input

is和 == 的区别

在说is 和 ‘==’的区别之前先说下 在python中 如何表示一个对象:

python的对象包含三要素,

  • id(身份标识符)
  • type(数据类型)
  • value(值)

在python中 is 和 ‘==’ 都是比较,但是他们的比较内容不同:is 比较的 id 和value 也就是比较两个对象是否是同一个实例对象,是否是指向同一个内存地址。 ‘==’ 比较的是 value,默认会调用_ eq _()方法

>>> a = 12345>>> b = 12345>>> a is bFalse>>> a == bTrue

看起来So easy,我们在来看两个例子

>>> a = 256>>> b = 256>>> a is bTrue>>> a == bTrue>>> a = 257>>> b = 257>>> a is bFalse>>> a == bTrue

嗯哼?a 和b 在256的时候 用is 判断内存地址居然是True?

小数据池

python3.6 对于整数做了一个 数据缓存:

因为出于对性能的考虑,Python内部做了很多的优化工作,对于整数对象,Python把一些频繁使用的整数对象缓存起来,保存到一个叫small_ints的链表中,在Python的整个生命周期内,任何需要引用这些整数对象的地方,都不再重新创建新的对象,而是直接引用缓存中的对象。Python把这些可能频繁使用的整数对象规定在范围[-5, 256]之间的小对象放在small_ints中,但凡是需要用些小整数时,就从这里面取,不再去临时创建新的对象。

python 还对字符串做了 数据缓存

a = 'asd'b = 'asd'print(a is b)   # Truea = 'asd 'b = 'asd 'print(a is b)   # False当不含有特殊字符时 公用同一个内存
a = 'a'*20b = 'a'*20print(a is b)   # True

其他的数据类型呢?

>>> a = (1,2,3) #a和b为元组类型>>> b = (1,2,3)>>> a is bFalse>>> a = [1,2,3] #a和b为list类型>>> b = [1,2,3]>>> a is bFalse>>> a = {'python':100,'com':1} #a和b为dict类型>>> b = {'python':100,'com':1}>>> a is bFalse>>> a = set([1,2,3])#a和b为set类型>>> b = set([1,2,3])>>> a is bFalse

总结

当变量是数字、字符串、元组,列表,字典时,is和==都不相同, 不能互换使用!当比较值时,要使用==,比较是否是同一个内存地址时应该使用is。当然,开发中比较值的情况比较多。

python3编码问题

ASCII Unicode Utf-8 gbk 字母 8位 1字节 32位 4字节 8位 1字节 中文 32位 4字节 24位 3字节

1.各个编码之间的二进制,是不能互相识别的,会产生乱码。

2.文件的储存,传输,不能是Unicode(只能是utf-8,utf-16,gbk,ascii,等)

我们在使用python3时,可以发现python3中字符串的编码是Unicode编码,Unicode编码是不可存储、不可传输的,所以使用bytes类型

bytes类型

用法和str一样,不过显示不同 b’asd‘

bytes和str的区别是编码问题 bytes的编码是utf-8 而str的编码是Unicode。所以 当文件传输 和保存的时候需要使用bytes类型

str to bytes

​ encode

bytes to str

decode