当前位置:   article > 正文

python中import用法|如何调用不同.py文件|连环import报错_python import py文件

python import py文件


跨文件调用主要分为调用函数(未定义在类内)和调用类(包括类内方法等)两种情况。
相应的调用语句有两种格式:

1. import 文件名
2. from 文件名 import 函数名/类名

第一种用法需要在后续每次使用时写为“文件名.函数名/类名”,而第二种方法在后续使用时可以省略第一种方法中的“文件名.”
下面分别进行介绍。

1 同一目录下

1.1 调用函数(未定义在类内)

被调用的sum.py文件

def add(x,y):
    print('x+y=%d'%(x+y))
  • 1
  • 2

1.1.1 import 文件名;文件名.函数名()

demo.py文件:

import sum
sum.add(1,2)
  • 1
  • 2

1.1.2 from 文件名 import 函数名;函数名()

from sum import add
add(1,2)
  • 1
  • 2

1.1.3 from 文件夹名 import 子文件下的函数名

f1
- f11
- - init.py
- - p1.py
- - p2.py
- t.py

在t.py中调用p1.py中的函数func,可以使用from f11.p1 import func,也可以在init.py中from p1 import func,然后在其他文件中就可以直接from f11 import func

1.2 调用类(包括调用类内的方法等)

被调用的sum.py文件:

class S:
    def __init__(self,xx,yy):
        self.x=xx
        self.y=yy
    def add(self):
        print("x+y=%d"%(self.x+self.y))
  • 1
  • 2
  • 3
  • 4
  • 5
  • 6

1.2.1 import 文件名;文件名.类名()(即init函数)

import sum
s=sum.S(2,3)
s.add()
  • 1
  • 2
  • 3

1.2.2 from 文件名 import 类名;类名()(即init函数)

demo.py文件:

from sum import S
s=S(2,3)
s.add()
  • 1
  • 2
  • 3

2 不同目录下

2.1 在根目录中调用其他文件夹文件

如:在t.py中调用 p1.py

- f1
- - p1.py
- - p2.py
- t.py

此时f1在t.py的搜索目录下,所以不需要修改搜索地址。
只需要在f1文件夹下创建一个__init__.py文件(空的即可),init.py的作用是告诉程序这个文件夹下的py文件可以被import。

2.2 在同级异目录下调用其他文件

如:在t.py中调用 p1.py

- f1
- - p1.py
- - p2.py
- f2
- - t.py

此时t.py的搜索目录是f2,使用’…'退回上一层目录:

from ..f1.p1 import sth
  • 1

然后同样在f1中创建一个__init__.py。

2.3 连环import报错:No Module Named…

如:在t中调用p1,在p1又调用了p2:

- f1
- - p1.py
- - p2.py
- t.py

# t.py:
import f1.p1
# p1.py:
import p2
  • 1
  • 2
  • 3
  • 4

直接执行p1不会报错,但执行t.py时会在import p2时报错No Module Named p2。
原因:将p1作为程序入口时,搜索目录在f1下,能找到p2.py;而t.py作为程序入口时,搜索目录变为根目录,不能直接找到p2.
解决办法:将f1加入到搜索目录

# p1.py
import sys
sys.path.append('./f1')
import p2
  • 1
  • 2
  • 3
  • 4

此时直接执行t.py也不会报错了。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/凡人多烦事01/article/detail/423410
推荐阅读
相关标签
  

闽ICP备14008679号