文章目录
- 1 同一目录下
- 1.1 调用函数(未定义在类内)
- 1.1.1 import 文件名;文件名.函数名()
- 1.1.2 from 文件名 import 函数名;函数名()
- 1.2 调用类(包括调用类内的方法等)
- 1.2.1 import 文件名;文件名.类名()(即init函数)
- 1.2.2 from 文件名 import 类名;类名()(即init函数)
- 2 不同目录下
- 2.1 在根目录中调用其他文件夹文件
- 2.2 在同级异目录下调用其他文件
- 2.3 连环import报错:No Module Named...
跨文件调用主要分为调用函数(未定义在类内)和调用类(包括类内方法等)两种情况。
相应的调用语句有两种格式:
1. import 文件名
2. from 文件名 import 函数名/类名
第一种用法需要在后续每次使用时写为“文件名.函数名/类名”,而第二种方法在后续使用时可以省略第一种方法中的“文件名.”
下面分别进行介绍。
1 同一目录下
1.1 调用函数(未定义在类内)
被调用的sum.py文件:
def add(x,y):
print('x+y=%d'%(x+y))
1.1.1 import 文件名;文件名.函数名()
demo.py文件:
import sum
sum.add(1,2)
1.1.2 from 文件名 import 函数名;函数名()
from sum import add
add(1,2)
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.1 import 文件名;文件名.类名()(即init函数)
import sum
s=sum.S(2,3)
s.add()
1.2.2 from 文件名 import 类名;类名()(即init函数)
demo.py文件:
from sum import S
s=S(2,3)
s.add()
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,因此f1不在搜索目录,需要将其加入:
improt sys
sys.append('../f1')
然后同样在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
直接执行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
此时直接执行t.py也不会报错了。