51学通信论坛2017新版
标题:
1.9 Bytes数据类型及三元运算
[打印本页]
作者:
爱卫生
时间:
2017-12-12 19:35
标题:
1.9 Bytes数据类型及三元运算
本帖最后由 爱卫生 于 2017-12-12 20:39 编辑
1 三元运算
先来看段小代码:
a,b,c=1,3,5
d = a if a > b else c
print(d)
复制代码
执行结果为5。也就是第二行做了个判断,如果a大于b,则d等于a,否则d等于c。所以最后d等于5。第二行这种格式就叫三元运算。
如果不通过三元运算,就只能这样写:
a,b,c=1,3,5
if a >b:
d = a
else:
d = c
复制代码
这两段代码的效果是一样的,都把变量c的值赋给了变量d。
2 Bytes数据类型
Bytes可以简单理解为二进制数据类型。python3中是严格区分的,而python2中认为bytes和字符串是一样的。也就是说python3中对文本和二进制进行了严格的区分,比如通过以太网口发出去的包(例如一个txt文档,一张图片)都必须要求是bytes数据类型,不能是字符串。可以通过b函数来转换。
2.1 对文本进行编码:
常见的中文文本采用utf-8、gb2312进行编码,但需要转成Bytes数据类型才能通过网络传送。
看代码:
msg = "我爱北京天安门"
print(msg)
print(msg.encode(encoding="utf-8"))
print(msg.encode(encoding="gb2312"))
print(msg.encode())
复制代码
执行效果:
我爱北京天安门
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
复制代码
可以看到输出中,第2行和第4行是一样的。这说明当前系统默认采用utf-8进行编码。最左边小写的b就代表当前是二进制的bytes类型编码。
通过以下代码可以当前系统的默认编码:
import sys
print(sys.getdefaultencoding())
复制代码
2.2 对文本进行解码:
看代码:
msg = "我爱北京天安门"
print(msg)
print(type(msg))
msg_bytes=msg.encode(encoding="utf-8")
print(msg_bytes)
print(type(msg_bytes))
msg_utf = msg.encode(encoding="utf-8").decode(encoding="utf-8")
print((msg_utf))
print(type(msg_utf))
复制代码
结果:
我爱北京天安门
<class 'str'>
b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
<class 'bytes'>
我爱北京天安门
<class 'str'>
复制代码
一共有6个print,总共打印了6行。都是先打印值,然后打印数据类型。俩字符串,一个bytes类型。
欢迎光临 51学通信论坛2017新版 (http://bbs.51xuetongxin.com/)
Powered by Discuz! X3