小知识点

小知识点

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 b
False
>>> a == b
True

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

>>> a = 256
>>> b = 256
>>> a is b
True
>>> a == b
True

>>> a = 257
>>> b = 257
>>> a is b
False
>>> a == b
True

嗯哼?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)   # True

a = 'asd '
b = 'asd '
print(a is b)   # False

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

其他的数据类型呢?

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

总结

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

python3编码问题

ASCIIUnicodeUtf-8gbk
字母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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值