python3学习(1)

发布时间:2019-09-28 08:39:10编辑:auto阅读(2108)

    判断编码格式

    import chardet
    chardet.detect("abc迭代".encode("gbk"))#需要加encode
    {'encoding': 'ISO-8859-1', 'confidence': 0.73, 'language': ''}

    python2 和python3文件处理字符编码区别
    py2:
    1 文件要存为utf-8
    2 文件第一行声明为:#encoding=utf-8
    #coding=utf-8
    #coding:utf-8
    #_coding:UTF-8_
    3 所有的中文前面加u,表示unicode

    py3:
    1 文件要存为utf-8
    2 声明可以不加,加上也没问题
    3 中文前面不用加u,加了也没事。

    1 保存为ANSI
    2 文件头声明为#encoding=gbk
    3 中文前面不加u,加了应该也没事

    py3示例:

    #coding=gbk
    s = "中国"
    print(s) #按照gbk转换到unicode
    文件保存的是ANSI

    s = "中国"
    print(s)
    这个在文件里面,默认是用utf8的,但是保存的又是ANSI

    E:\python>py -3 a.py
    File "a.py", line 1
    SyntaxError: Non-UTF-8 code starting with '\xd6' in file a.py on line 1, but no encoding declared; s
    ee http://python.org/dev/peps/pep-0263/ for details

    #coding=utf-8
    s = "中国"
    print(s)
    文件保存为utf-8,#coding=utf-8这个可写可不写,默认是按照utf是转换到unicode的

    示例:
    py2:存为utf-8,文件第一行也声明为utf-8
    str1="我们" 类型:str
    #str1.decode() 默认是:ascii解码
    str1.decode("utf-8")
    str1.decode("utf-8")==u"我们"
    str1.decode("utf-8").encode("utf-8")==str1

    py2:存为ansi,文件第一行也声明为gbk
    str1="我们" 类型:str
    #str1.decode() 默认是:ascii
    str1.decode("gbk")==u"我们"
    str1.decode("gbk").encode("gbk")== str1

    python2 和python3 decode 、encode区别
    str2=u"我们"  类型:unicode

    py2:str类型等价于py3的bytes类型
    py2:str类型例子: s ="中国"
    py2的Unicode类型例子:s =u"中国"

    p3:str类型等价于py2的unicode类型
    py3 的str类型:s = "中国"
    py3 的bytes类型: s= "中国".encode("utf-8")

    encode:
    不管是2还是3,只能对unicode对象来用
    在py2:将unicode类型的对象,转换为str类型
    在py3:将 str类型的对象,转换为了bytes类型

    decode:
    不管是2还是3,只能对非unicode对象使用
    在py2:将str类型的对象,转换为unicode类型
    在py3:将bytes类型的对象,转换为了unicode类型

    Py3中如:

    s = "中户任命施蒂利克积分洛杉矶的方式"
    print(s.encode("gbk").decode("gbk"))
    中户任命施蒂利克积分洛杉矶的方式

    分析:
    其中s本身str类型,即是unicode编码在内存中保存,分两步:
    1、s.encode("gbk")是把unicode编码成gbk,在内存中是bytes类型保存;
    2、s.encode("gbk").decode("gbk") 是把上一步得到的结果解码成gbk编码,在内存中用unicod保存,才可以在终端中展示;

    只有在unicode下才能将utf-8与gbk互转

    py3时:
    a="中国" 和a=u"中国" 是一个意思,都表示str类型unicode存储类型
    c=b"good" 表示str类型bytes存储类型

    py2时:
    a="中国" 和a=b"中国" 是一个意思,表示str类型bytes存储类型
    a=u"中国" 表示str类型unicode存储类型

    unicode是在内存中使用
    bytes在文件存储和网络数据传输中使用。

    练习题6:
    py2 :声明str类型变量和unicode变量
    将unicode变量变为2个str变量(gbk,utf-8各一次)
    将utf-8编码的str类型,转换为gbk
    #coding=utf-8
    str1 = "水电费了会计师福建省来访接待室浪费空间"
    str2 = u"中国了空间乱收费的健康"
    print str2.encode("utf-8")#这个编码成utf-8会展示乱码,因为终端是gbk编码
    print str2.encode("gbk")

    print str1.decode("utf-8").encode("gbk")

    交互模式:

    s = "迭代"
    s.decode("gbk")#因为默认是gbk展示的
    u'\u8fed\u4ee3'
    print s.decode("gbk")
    迭代

    查看python使用的默认编码

    import sys
    sys.getdefaultencoding
    <built-in function getdefaultencoding>
    sys.getdefaultencoding()
    'utf-8'
    "胜多负少计费".encode().decode()#这里默认都是使用utf-8进行编码和解码的
    '胜多负少计费'
    "胜多负少计费".encode("utf-8").decode("utf-8")
    '胜多负少计费'

    常量:
    const.py
    class _const:
    class ConstError(TypeError):pass
    def setattr(self, name, value):#赋值时候该函数会被自动调用
    if name in self.dict:
    raise self.ConstError
    self.dict[name]=value

    import sys
    #name代表当前模块,把const类注册到sys.modules这个全局字典中。
    sys.modules[name] = _const()
    print(name)

    print(_const())

    b.py
    import const
    const.magic = 23
    print(const.magic)
    const.magic = 33

    使用sys.modules[name]可以获取一个模块对象,并可以通过该对象获取模块的属性,这儿使用了sys.modules向系统模块字典中注入了一个_const对象从而实现了在执行import const时实际获取了一个_const实例的功能;

    其他模块执行import const 导入const模块时候sys.modules[name] = _const()会被执行(所有顶格写的代码都会被执行)系统模块字典中就注入了一个_const类的实例对象;而其他模块就可以使用该队形的方法和属性了;

    type(10)
    <class 'int'>
    type(10.2)
    <class 'float'>
    type(10+4j)
    <class 'complex'>
    isinstance(2,(int,float,complex))
    True

    字符串拼方式:

    "a" + "b" + "c"#效率低
    'abc'

    "".join(["a","b","c"])
    'abc'

    "%s" %50
    '50'

    True False可以作为常量相加
    True 1 False 0

    True +1
    2
    False + 2
    2

    True 1 False 0

    bool()函数
    判断True 或者 False

    bool({})
    False

关键字