zoukankan      html  css  js  c++  java
  • 12ch

    sys.path可以看到当你import 时搜索的路径,为了引用自己的模块,我们可以使用:

    sys.path.append('/homw/py/lib')

    使用sys.modules可以找到当前导入了那些模块和它们来自何处,sys.modules是一个字典,

    使用模块名作为键,对应物理地址作为值。

    12.3名称空间

    名称空间是名称(标识符)到对象的映射,向名称空间添加名称的过程涉及绑定标识符到对象(以及

    该对象引用计数加1)《Python语言草靠手册》中指出:“changing the mapping of a
    name is called rebinding[, and] removing a name is unbinding.”

    在程序执行期间有两个或三个活动的名称空间,分别是:局部名称空间,全局名称空间,内建名称空间,

    其中局部名称空间在执行期间不断变换。

    名称空间调用顺序:

    Python解释器首先加载内建名称空间,它由__builtins__模块

    中的名字构成。随后加载执行模块的全局名称空间,并在模块开始执行后变为活动名称空间。

    如果在执行期间调用了一个函数,将加载局部名称空间。

    12.3.1名称空间与变量作用域

    名称空间与作用域比较

    也就是说,名称空间是互相独立的,作用域是相互包括的。

    名称空间的查找顺序如图所示,local的名称会屏蔽global的名称。

    12.3.3无限制的名称空间

    你可以为一个类添加属性,仅仅使用emptyclass.x = something这样简单的语句。

    12.4导入模块

    import的顺序最好是:Python标准库模块, Python第三方模块, 应用程序自定义模块

    你可以使用as来重命名你导入的模块,比如 from cgi import FieldStorage as form

    python会自动忽略重复的导入。

    为了避免总是使用句点访问,你可以使用from module import var,这样就可以使用

    var而不是module.var,你应该避免使用from module import*,除非你要使用

    Tkinter,Numpy,socket等属性非常多的模块。

    12.6模块内建函数

    globals(),locals()

    返回一个字典,包含对应的名字空间

    reload()

    重新导入一个模块,该模块必须是完全导入没有使用from-import的,另外reload()的参数

    是模块名而不是字符串

    12.7包

    包是一个有层次的文件目录结构(模块的集合)

    12.8.2阻止属性导入

    如果你不希望某个模块属性被“from module import*”导入,那么可以将不想导入的模块命名

    前加上下划线(_)

    12.8.3不区分大小的导入

    Python指定一个叫PYTHONCASEOK的环境变量,导入第一个匹配的模块名(不区分大小写)。

    (从其他地方搜到:

    Python 环境变量
    下面几个重要的环境变量,它应用于Python:

    变量名 描述
    PYTHONPATH PYTHONPATH是Python搜索路径,默认我们import的模块都会从PYTHONPATH里面寻找。
    PYTHONSTARTUP Python启动后,先寻找PYTHONSTARTUP环境变量,然后执行此文件中变量指定的执行代码。
    PYTHONCASEOK 加入PYTHONCASEOK的环境变量, 就会使python导入模块的时候不区分大小写.
    PYTHONHOME 另一种模块搜索路径。它通常内嵌于的PYTHONSTARTUP或PYTHONPATH目录中,使得两个模块库更容易切换。

     12.8.4源代码编码

    PEP263

    12.8.5导入循环

    在修改大文件时,为了避免模块体积过大,我们往往会把新添加的内容放进另一个模块,然后让它们互相导入,但我们可能因此遇到

    循环导入的情况,比如说:

    在模块oldmodule中

    from newmodule import newmodule

    def newmethod():

      pass
    def oldmodule():

      newmodule()

    在另一个模块newmodule中

    import oldmodule

    def newmodule():

      oldmodule.newmethod()

    这样会陷入互相Import的循环中,为此我们不得不调整import的位置,比如在文件的末尾import,在这个例子中:

    def newmodule():

      import oldmodule

      oldmodule.newmethod()

  • 相关阅读:
    HttpURLConnection请求网络数据的GET请求
    ImageLoader的Jar包加载图片
    使用HttpUtils 上传视频文件
    VideoView的视频播放
    VideoView的视频的全屏播放
    Android中在activity中弹出一个popwindow
    随心而记
    Java -- springboot 配置 freemarker
    Tensorflow替换静态图中的OP
    python 系统定时关机
  • 原文地址:https://www.cnblogs.com/autoria/p/4508920.html
Copyright © 2011-2022 走看看