zoukankan      html  css  js  c++  java
  • Python Day5 模块 包

     一:区分Python文件的2种用途

      1个Python文件的2种用途

      1.1 当作脚本执行:        if __name__ == '__main__':

      1.2 当作模块导入使用     if __name__ == '模块名':

                if __name__ == '__main__':

                   pass

         spam.py

        说明 在Python内有一种方法     

    __name__   这种方法在文件当中默认等于__main__    (此处为2个_)  这样的作用就是。代码可以调试的时候运行的是整个spam.py
     1 money = 1000
     2 
     3 
     4 def index():
     5     print('in the index', money)
     6 
     7 
     8 def bbs():
     9     print('in the bbs', money)
    10 
    11 
    12 def delphi():
    13     print('in the delphi', money)
    14 
    15 
    16 if __name__ == '__main__':
    17     bbs()
    18     delphi()
    19     index()
    20     print('调试功能')
    21 
    22 print(__name__)  # __main__
    View Code

    写完后本地调用直接运行;其他地方需要引用默认不会输出

    二:模块的搜索路径

      1   内存

          

    sys.modules  查看已经加载到内存的模块

      2   内置模块   sys   内置模块都是C语言写的

      3 自己定义的模块    sys.path-->查看当前环境变量

    需要加入到环境变量才可以执行:

    自己定义模块的时候 不能定义跟内置一样的模块

    三: 包

        1.什么是包

            包就是1个包含__init__.py的文件夹,(可以往该文件夹下放一堆子模块)

     在python3中,即时包的文件夹下没有__init__.py文件 python3也不会报错,但是python2会报错

     之所以这样做是因为在import package1的时候,看似导入的是package1   实际上导入的是它下面的__init__.py文件

    示例如下

    在__init__.py中写入:

     然后在包的导入.py文件中执行导入操作后的执行结果

     ================示例1 begin===================

    init文件

     

     解释如下:

    当包的使用.py运行时,import package1 实际上是导入运行了package1文件夹下的init文件;

    然后在执行

    from package1 import m1
    在package1下的m1被导入了init当中
    因而最后包的导入中的package1.m1.func()就可以运行了

     ================示例1 end===================

     注意核心是:根据执行文件所在的路径去找,只有执行文件所在的路径才会加到环境变量当中

    2   包的使用

          注意:但凡在导入时,出现.   (点)   这是导入包才用的语法

    点的左边必须是一个包;使用的时候没有限制

    以上的导入方式太麻烦了;那么针对此;有没有简便的方法?

    =====================================示例2==================================================

     要实现该功能,只要在D:DocumentPython0404day5模块和包测试2package1\__init__.py中写入

    上面的导入方式是绝对导入

     之所以要这么做   是为了区分开开发者和使用者

    =============================================示例3===========================================

    原先结构不变;

     

     程式照样运行

    注意点   相对导入是从当前init的路径下开始找      .   点  表示当前文件夹

    一个点就表示往上一层

    1 from ..m1 import func1
    2 def func2():
    3     func1()
    4     print('in the func2 m2')
    View Code
  • 相关阅读:
    解决Firefox下outerHTML不支持问题
    神奇的css属性pointerevents
    IE6 double marginleft Bug
    解决IE低版本不支持call和apply问题
    JavaScript函数参数的可修改性
    IE6/7 double paddingbottom Bug
    各浏览器对document.getElementById等方法的实现差异
    JavaScript中两种类型的全局对象/函数
    JavaScript子类用Object.getPrototypeOf去调用父类方法
    JavaScript声明全局变量三种方式的异同
  • 原文地址:https://www.cnblogs.com/nodchen/p/8991591.html
Copyright © 2011-2022 走看看