zoukankan      html  css  js  c++  java
  • module模块和包

    import 和 from 调用

    module 目录有calc.py 和  test.py 两个文件

     

    calc.py文件内容:

    def add(x,z):
        return x+z
    
    
    def sub(x,z):
        return x-z

    test.py文件调用:

    import calc  #默认是同级目录下面查找
    print(calc.add(1,2))
    
    
    from calc import sub
    print(sub(10,5))

     

    导入模块按照下面方式查找
    import
    sys print(sys.path) ['D:\Study\module', 'D:\Study','C:\Program Files (x86)\Python36-32\python36.zip', 'C:\Program Files (x86)\Python36-32\DLLs', 'C:\Program Files (x86)\Python36-32\lib', 'C:\Program Files (x86)\Python36-32', 'C:\Program Files (x86)\Python36-32\lib\site-packages', 'C:\Program Files\JetBrains\PyCharm 2018.1.1\helpers\pycharm_matplotlib_backend']

     

    总结下:

      执行py文件的,执行文件的中的import 模块,只会导入当前执行文件的路劲导入文件,不会去其他目录查找(除系统提供的目录外).

      

    例: 有如下一个目录结构的

            

      calc文件内容如下:

                

          test文件内容如下:

       

     

         a文件内容如下:

         

     调用:a.py 发现会报错

        

     为什么报错了? 

           a.py --> 导入 from module import test (执行module目录中test文件)   --> test 文件 import calc (报错) --> 因为当前执行的a.py文件 在当前目录找到calc(就是吧test这文件的内容拿到当前执行py里面来执行)

           我们执行a.py文件的时候,只会找当前目录的模块文件,虽然我们导入module文件中的test文件,test文件有import calc模块(import calc.py文件);但是最终还是报错,这是因为我执行的py文件的是a.py ;而test中的import calc只是一个引入文件,并不是执行文件,解释器找到这层的时候,只会按照执行文件这层目录去导入文件,所以解释器只认识a,py这层文件,这时就报错了.这就是上面总结的,反复强调 执行py文件的,执行文件的中的import 模块,解释器只会导入当前执行文件的路劲导入文件,不会去其他目录查找(除系统提供的目录外),

    如何修改:

          test.py文件中的import calc 修改为 from module import calc  修改完就正常了

  • 相关阅读:
    利用pyinotify监控文件内容,像tailf命令但比它更强
    AWS SDK for C++调用第三方S3 API
    Windows 10恢复Shift+右键打开命令提示符窗口
    TP-LINK WR841N V8刷OpenWRT
    Build subversion 1.8 with SSL on OS X Yosemite
    OpenWrt自定义和官方一样的固件
    Windows 10下通过蓝牙连接iPhone个人热点进行共享上网
    Broadcom有线网卡在Windows 8/8.1/10下使用系统自带驱动会断网的解决办法
    BCM94352HMB蓝牙BCM20702A0在Ubuntu 14.04下的驱动方法
    Spring Boot 发送邮件
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9008423.html
Copyright © 2011-2022 走看看