zoukankan      html  css  js  c++  java
  • 【python】关于python中模块导入的总结

    precondition:比如我有如下这样的文件目录结构

    说明:add和debug两个包都隶属于src目录,它们是同级目录,其中在add路径下有一个add.py的模块,里面定义了一个jiafa()的函数,实现两数相加并输出总和。

    现在要实现如下几个调用功能:

    1、在debug2文件实现直接调用add模块进行求和

    2、在debug1文件中实现调用add模块进行求和

    注意:要实现一个模块要能被另外其它模块正常调用,则在对应模块所在的文件夹下新建一个__init__.py的空文件(这个文件作用就是表示当前该文件夹为一个包,只有是包才能被其它模块所调用)

    add.py文件中定义了一个jiafa()的函数,代码如下:

    1 #-*- coding:utf-8 -*-
    2 '''
    3 Created on 2018年7月21日
    4 
    5 @author: lenovo
    6 '''
    7 def jiafa(a,b):
    8     print "a + b is:",a + b
    9     return a + b

    一、下面介绍实现第一个功能方法如下,在debug2.py文件中这样进行调用

    1 #-*- coding:utf-8 -*-
    2 '''
    3 Created on 2018年7月21日
    4 
    5 @author: lenovo
    6 '''
    7 import add
    8 
    9 print add.jiafa(11, 22)

    输出:

    a + b is: 33
    33

    总结:如果是在同一个包里面(也就是同一级目录),如果要调用其它模块的话,可以在程序中直接使用 “import 模块名”即可,例如上例中 import add

    二、下面介绍第二个功能的实现方法,在debug1文件中可以使用这三种方法进行调用:

    方法1、

    1 #-*- coding:utf-8 -*-
    2 '''
    3 Created on 2018年7月21日
    4 
    5 @author: lenovo
    6 '''
    7 from add.add import jiafa
    8 print jiafa(1, 4)

    输出如下

    a + b is: 5
    5

    总结1:模块间相互调用且不在同一个包里面(不在同一级目录),则使用 ”from 包名.模块名 import 函数名“,如果要调用多级目录里面的话(前提是每一级目录里面都要新增这个__init__.py的空文件),就这样 "from xxxx.xxx.xx.x import yy",例如上例中的 ”from add.add import jiafa“

    方法2、

    1 #-*- coding:utf-8 -*-
    2 '''
    3 Created on 2018年7月21日
    4 
    5 @author: lenovo
    6 '''
    7 from add.add import *
    8 print jiafa(2, 4)

    输出如下:

    a + b is: 6
    6

    总结2:在实际应用中,一个模块文件中不可能就只放一个函数,这样就像上面”总结1“里面的方法有个缺陷,如果要使用同一个模块里面其它函数的话,则又要重新导入一次要使用的函数,很麻烦,为了省事,就可以这样 "from xxx.xx.x import * ",用 * 号代表模块文件x中所有的函数,这样就可以全部导入进来

    方法三、

    1 #-*- coding:utf-8 -*-
    2 '''
    3 Created on 2018年7月21日
    4 
    5 @author: lenovo
    6 '''
    7 import add.add
    8 sum = add.add.jiafa(3,4)
    9 print sum

    输出如下:

    a + b is: 7
    7

    总结3:该方法跟第一个功能一样,只不过一个是在同级目录,一个是在不同目录里面。

    写在最末尾:在实际编码过程中,为了统一编码规范,在导入第三方模块时,上面import xx 和 from xx import yy两种方法最好统一使用一种,不要混合使用,这样比较利于提高程序的可读性。

  • 相关阅读:
    有高程点数据,想生成等高线数据后再生成TIN
    【转】ArcGIS Server安装
    CSS定义不规则图片排版
    ArcEngine实现打开shapfile、Raster、TIN文件
    VSS在签出工程时老提示"network not found"或者''Invalid handle"的解决办法
    SiteServer CMS 上传文件过滤,只能是图片格式。
    突然记起我也遇到过一个麻花姐
    六一快乐
    杭州,婺源
    <转>一斗米养个仇人
  • 原文地址:https://www.cnblogs.com/aziji/p/9347423.html
Copyright © 2011-2022 走看看