zoukankan      html  css  js  c++  java
  • python day17

    导入模块的两个细节

    1、跨文件夹导入模块

      #1)如果a文件夹所在目录在环境变量里,a文件夹中的ma模块可以被以下方式导入

      import a.ma |   from a import ma

      #2)如果a文件夹所在目录在环境变量里,a文件夹中的b文件夹的mb模块可以被以下方式导入

      import a.b.mb |   from a.b import mb

      #3)如果a文件夹所在目录在环境变量里,a文件夹中的b文件夹的mb模块中的bbb名字要被直接导入

      import a.b.mb.bbb  #错误用法,  所有.的左边必须是文件夹

      from a.b import mb.bbb  #也是错误, 所有.的左侧必须是文件夹

      from a.b.mb import bbb  #正确

    2、文件被执行的两种方式

      -1、一个py文件作为自执行文件,__name__变量的值为'__main__'

      -2、一个py文件作为模块被导入执行,__name__变量的值为模块的名字

    #如何区分两种方式:一个文件可以自执行,也可以被导入执行  共存

    #在这个py文件后面加上if判断语句

    if __name__ == '__main__'

      #自执行的逻辑代码    #这样的文件作为模块被导入时,__name__为模块名,不满足if条件,

                    #就不会执行自执行的逻辑

    #一系列模块的集合体,用文件夹来管理一系列有联系功能的模块,该文件夹我们称之为包,文件夹名就是包名

    包与普通文件夹的区别:包的文件夹一定存在一个__init__.py文件

      --py2必须创建__init__.py文件

      --py3可以不创建,系统会帮我们创建,但是如果想管理包里的模块,也是必须创建的

    #__init__.py文件

    1)产生一个全局名称空间,提供给包,就代表包的名称空间

    2)管理 包可以直接点出来的使用的 名字

    #导包完成的三件事

    1)编译形成包中的__init__.py文件的pyc文件

    2)执行__init__.py文件,形成一个全局名称空间,将__init__.py文件中所有的名字存放其中,该名称空间就代表包的名称空间

    3)在导包的文件中产生一个与包名相同的名字,指向包的名称空间(__init__.py文件的全局名称空间)

    直接使用包中的模块

    如果只是想作为普通文件夹,py3中可以省路__init__.py文件,本质上文件夹也是包

    导入的手段:1、指名道姓到某一个模块  |  2、指名道姓到某一模块中的名字

    (直接使用的话就相当于上面的跨文件夹导入模块)

    包的管理

    #在包中采用相对导入来管理模块或者模块中的名字

      相对导入:导入语句中用.代替某些路径的导入方式就是相对导入

              --相对导入不依赖于sys.path 

    #在包的__init__.py文件或是包中任意一个模块中

    #.代表的是当前文件所在目录

    #..代表的是上一级文件的所在目录,可以通过..在上一级的目录里导模块,但是..不能出包的目录

    注:.语法不能出包,因为包外的文件都能自执行,但是拥有.开头导入的文件不能自执行,只能通过别人导入执行

  • 相关阅读:
    Oracle DBLink 使用情况
    asp.net里AjaxPro简单入门教程
    AjaxPro异步调用的超时设置
    ORA-01552: 非系统表空间 'USERS' 不能使用系统回退段的处理
    andoid 监听返回键退出
    WinForm调用user32.dll实现全屏
    C# Panel 打开 Form 窗口的方法
    Android获取日期及星期的方法
    WinForm 自定义对话框 获取返回值
    52. (待补) 实现对 无头单链表 的基本操作
  • 原文地址:https://www.cnblogs.com/hesujian/p/10821361.html
Copyright © 2011-2022 走看看