zoukankan      html  css  js  c++  java
  • reload函数

    reload函数

    python2中reload()是内置函数,可以直接调用:

    reload()

    python3中将reload()函数放到了imp包中,需要先引入imp包:

    from imp import reload

    reload()

     

    reload函数有什么用呢?

    先了解一下decode和encode

    encode是把anscii/unicode/gbk对象转成str(字节流)对象

    decode是把str(字节流)对象转成anscii/unicode/gbk对象

     

    python中,编码解码其实是不同编码系统间的转换,默认情况下,转换目标是Unicode,即编码unicode→str,解码str→unicode,其中str指的是字节流,而str.decode是将字节流str按给定的解码方式解码,并转换成utf-8形式,u.encode是将unicode类按给定的编码方式转换成字节流str。注意调用encode方法的是unicode对象,生成的是字节流;调用decode方法的是str对象(字节流),生成的是unicode对象。若str对象调用encode会默认先按系统默认编码方式decodeunicode对象再encode,忽视了中间默认的decode往往导致报错。

     

    比如有如下代码: 

      #! /usr/bin/env python 
      # -*- coding: utf-8 -*- 
      s = '中文字符'  # 这里的 str 是 str 类型的,而不是 unicode 
      s.encode('gb2312') 

    这句代码将 s 重新编码为 gb2312 的格式,即进行 unicode -> str 的转换。因为 s 本身就是 str 类型的,因此 
    Python 会自动的先将 s 解码为 unicode ,然后再编码成 gb2312。因为解码是python自动进行的,我们没有指明解码方式,python 就会使用 sys.defaultencoding 指明的方式来解码。很多情况下 sys.defaultencoding为ANSCII,如果 s 不是这个类型就会出错。
      UnicodeDecodeError: 'ascii' codec can't decode byte 0xe4 in position 
      0: ordinal not in range(128) 

    对于这种情况,我们有两种方法来改正错误: 
    1. 明确的指示出 s 的编码方式 

      #! /usr/bin/env python 
      # -*- coding: utf-8 -*- 
      s = '中文字符' 
      s.decode('utf-8').encode('gb2312') 

    2. 更改 sys.defaultencoding 为文件的编码方式 

      #! /usr/bin/env python 
      # -*- coding: utf-8 -*- 
      import sys 
      reload(sys) # Python2.5 初始化后删除了 sys.setdefaultencoding 方法,我们需要重新载入 
      sys.setdefaultencoding('utf-8') 

      str = '中文字符' 
      str.encode('gb2312')

  • 相关阅读:
    Url参数的安全性处理
    redis安装学习
    Spring的IOC原理(转载)
    Linux下jdk&tomcat的安装
    App架构经验总结(转载)
    谈谈对Spring IOC的理解(转载)
    2018,扬帆起航!
    Lua随机问题
    为什么R#警告Warning Delegate subtraction has unpredictable result
    Dotween实现打字机效果,并向下滚屏
  • 原文地址:https://www.cnblogs.com/zealousness/p/8748924.html
Copyright © 2011-2022 走看看