51学通信论坛2017新版

 找回密码
 立即注册
搜索
热搜: 活动 交友 discuz
查看: 2286|回复: 0
打印 上一主题 下一主题

1.9 Bytes数据类型及三元运算

[复制链接]

 成长值: 15816

  • TA的每日心情
    开心
    2018-9-25 20:47
  • 24

    主题

    39

    帖子

    457

    积分

    新手上路

    Rank: 1

    积分
    457
    跳转到指定楼层
    楼主
    发表于 2017-12-12 19:35:51 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式
    本帖最后由 爱卫生 于 2017-12-12 20:39 编辑

    1 三元运算
    先来看段小代码:
    1. a,b,c=1,3,5
    2. d = a if a > b else c
    3. print(d)
    复制代码
    执行结果为5。也就是第二行做了个判断,如果a大于b,则d等于a,否则d等于c。所以最后d等于5。第二行这种格式就叫三元运算。
    如果不通过三元运算,就只能这样写:
    1. a,b,c=1,3,5
    2. if a >b:
    3.     d = a
    4. else:
    5.     d = c
    复制代码
    这两段代码的效果是一样的,都把变量c的值赋给了变量d。




    2 Bytes数据类型
    Bytes可以简单理解为二进制数据类型。python3中是严格区分的,而python2中认为bytes和字符串是一样的。也就是说python3中对文本和二进制进行了严格的区分,比如通过以太网口发出去的包(例如一个txt文档,一张图片)都必须要求是bytes数据类型,不能是字符串。可以通过b函数来转换。

    2.1 对文本进行编码:
    常见的中文文本采用utf-8、gb2312进行编码,但需要转成Bytes数据类型才能通过网络传送。
    看代码:
    1. msg = "我爱北京天安门"
    2. print(msg)
    3. print(msg.encode(encoding="utf-8"))
    4. print(msg.encode(encoding="gb2312"))
    5. print(msg.encode())
    复制代码
    执行效果:
    1. 我爱北京天安门
    2. b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
    3. b'\xce\xd2\xb0\xae\xb1\xb1\xbe\xa9\xcc\xec\xb0\xb2\xc3\xc5'
    4. 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类型编码。
    通过以下代码可以当前系统的默认编码:
    1. import sys
    2. print(sys.getdefaultencoding())
    复制代码
    2.2 对文本进行解码:
    看代码:
    1. msg = "我爱北京天安门"
    2. print(msg)
    3. print(type(msg))
    4. msg_bytes=msg.encode(encoding="utf-8")
    5. print(msg_bytes)
    6. print(type(msg_bytes))
    7. msg_utf = msg.encode(encoding="utf-8").decode(encoding="utf-8")
    8. print((msg_utf))
    9. print(type(msg_utf))
    复制代码
    结果:
    1. 我爱北京天安门
    2. <class 'str'>
    3. b'\xe6\x88\x91\xe7\x88\xb1\xe5\x8c\x97\xe4\xba\xac\xe5\xa4\xa9\xe5\xae\x89\xe9\x97\xa8'
    4. <class 'bytes'>
    5. 我爱北京天安门
    6. <class 'str'>
    复制代码
    一共有6个print,总共打印了6行。都是先打印值,然后打印数据类型。俩字符串,一个bytes类型。


    回复

    使用道具 举报

    您需要登录后才可以回帖 登录 | 立即注册

    本版积分规则

    Archiver|手机版|小黑屋|51学通信技术论坛

    GMT+8, 2025-1-31 14:44 , Processed in 0.079739 second(s), 33 queries .

    Powered by Discuz! X3

    © 2001-2013 Comsenz Inc.

    快速回复 返回顶部 返回列表