python 小知识

1、比较 赋值 is

= 赋值
== 比较值是否相等
is 比较的是内存地址

li1 = [1,2,3]
li2 = li1
print (id(li1),id(li2))
(9664704, 9664704)

数字,字符串 小数据池
数字的范围 -5–256
字符串:1、不能有特殊字符
2、s20是同一个地址,s21以后也都是两个地址


```python
i1 = 6
i2 = 6
print (id(i1),id(i2))
140723988820384 140723988820384

s1 = 'abc' * 20
s2 = 'abc' * 20
print (s1 is s2)
True
s1 = 'abc' * 210
s2 = 'abc' * 210
print (s1 is s2)
True

ss1 = 'ab#'
ss2 = 'ab#'
print (ss1 is ss2)
True

剩下的list、dict、tuple、set, 即便值相同,is是不相同

l1 =[1,]
l2 =[1,]
print (l1 is l2)
False

ll1 = {1:'2',1:'3',}
ll2 = {1:'2',1:'3',}
print (ll1 is ll2)
False

2、字符编码格式

ASCII

A:00000010    8位      一个字节

unicode

A:00000000 00000001 00000010 00000100  32位 四个字节
中:00000000 00000001 00000010 00000110 32位 四个字节

utf-8

A: 00100000   8位 一个字节
中:00000001 00000010 00000110   24位 三个字节

gbk

A:00000110 8位 一个字节
中:00000010 00000110 16位 两个字节

1、各个编码之间的二进制,是不能互相识别的,会产生乱码
2、文件的存储,传输,不能是unicode(只能是UTF-8 utf-16 gbk gb2312 ascii等)

py3

对于英文

str在内存中使用unicode编码
	表现形式:s = 'alex'
    编码方式: 010101010 unicode

bytes 编码方式utf-8 utf-16 gbk gb2312 (存储和传输)
     表现形式: s = b'alex'
     编码方式:000101010 utf-8  gbk。。。。。。
s = 'alex'
s1 = b'alex'
print (s,type(s))
print (s1,type(s1))
alex <class 'str'>
b'alex' <class 'bytes'>

对于中文:

str:表现形式:s = '中国'
    编码方式:010101010 unicode
     
bytes:表现形式:s = b'x\e91\e91\e01\e21\e31\e32'
       编码方式:000101010 utf-8 gbk 。。。。。

str->bytes 编码的过程
错误的编码方式

s = '中国'
print (s,type(s))
s1 = b'中国'
print (s1,type(s1))
File "C:/python/diangotest/dic.py", line 136
    s1 = b'中国'
        ^
SyntaxError: bytes can only contain ASCII literal characters.
s1 = 'alex'
s2 = '中国'
s22 = s2.encode('utf-8')
print (s22)
s22 = s2.encode('gbk')
print (s22)
b'\xe4\xb8\xad\xe5\x9b\xbd'
b'\xd6\xd0\xb9\xfa'
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值