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  修改完就正常了

  • 相关阅读:
    使用CuteFTP登陆FTP(servU)服务器后无法LIST目录和文件的解决方法
    delphi技巧集锦之一
    delphi技巧集锦之二
    关于varchar(max), nvarchar(max)和varbinary(max)
    别告诉我你会用WORD
    Showmodal与show的区别
    SET ANSI_NULLS ON的用法
    {右键我的电脑无法打开计算机管理}解决方法
    Word常用技巧
    Excel 使用技巧集锦——163种技巧
  • 原文地址:https://www.cnblogs.com/ajaxa/p/9008423.html
Copyright © 2011-2022 走看看