zoukankan      html  css  js  c++  java
  • Python:模块详解及import本质

    转于:http://www.cnblogs.com/itfat/p/7481972.html

    博主:东大网管

     

    一、定义:

     模块用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名:test.py,对应的模块名:test)

    包:用来从逻辑上组织模块的代码,本质就是一个目录(必须带有一个__init__.py文件)。

    二、导入方法:

     A、格式:import module_name

     B、引用脚本里的函数用方法module_name.logger()

     C、import module1_name,module2_name

       ==>导入多个脚本模块

     D、from module_alex import *

       ==>这里相当于导入module_alex脚本文件里的所有代码

     E、from module_alex import m1,m2,m3

       from module_alex import logger as logger_alex

        ==>这里相当于导入module_alex脚本里的logger函数,并给它起别名为logger_alex,注意这里的 logger不能写成 logger();

        ==>用from的方法,这个想再引用module_alex里的函数或者变量,直接logger()就OK了。如果有别名那么直接执行logger_alex()

    三、import本质

     ==>把模块的所有代码解释了一遍,赋值给module_alex

     A、from module_alex import name的本质(把name这个代码复制一份到当前脚本)

     B、import本质(路径搜索和搜索路径)

      # 导入模块的本质:就是把python文件解释一遍,然后赋值给模块名;(import test 相当于 test='test.py all code')

      # 导入模块的过程:找文件,找文件所在的路径,找sys.path

      ==>所以 我们需要把当前脚本的绝对路径的父父路径,加到sys.path里去,这样就可以找到其他模块。

     C、所以我们引入一个新模块os,os.path.abspath(__file__)可以获得当前模块的绝对路径

     D、然后再通过os.path.dirname可以获取到除文件名以外的路径,我们使用2次,就可以得到父父级目录,现在我们获得了父父级目录,我们把目录加到 sys.path去,但是我们注意我们需要把这个目录放到列表sys.path的第一个位置去~!

     E、导入包的本质就是执行该包下面的__init__.py文件

     

    四、导入优化

  • 相关阅读:
    [记录]Eclipse版本选择和安装
    Nexus+Maven安装配置手册
    Eclipse编写Java程序
    Tomcat下载和配置
    SQL Server如何清除连接过的服务器名称历史?
    为文本添加全选Ctrl + A 功能
    配置Eclipse使用TFS源码管理
    [jQuery] jSrcollable
    [ios] cocos2d/cocos2dx 演示
    [c++] 实现类似printf这样的函数
  • 原文地址:https://www.cnblogs.com/volcao/p/8830512.html
Copyright © 2011-2022 走看看