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
  • 相关阅读:
    用jQuery的offset()替代javascript的offset
    java实现SAP BO登录
    原生js实现模块来回拖拽效果
    HTML中marquee标签的使用
    axure 预览"HTTP/1.1 302 Found"
    redis命令详解
    idea找不到package下的mapper.xml文件
    confluence搭建详情
    httpClient解决post请求重定向的问题
    java double相加
  • 原文地址:https://www.cnblogs.com/nodchen/p/8991591.html
Copyright © 2011-2022 走看看