一、同级目录下不同文件引用
如图所示:day4下有a.py和b.py两个文件,现在需要在b.py文件中引用a.py文件的变量和方法
在b.py文件中,输入 import a,检查import a后输出结果,结果为a.py的文件执行结果。注意:import xxx 表示会执行xxx的代码,可使用import xxx as f ,使用f为xxx取表明,此时 f.func()等价于xxx.func()
同级目录下文件引用可使用两种方式:1、在需要引用的文件开头,输入import xxx as f,使用f.方法名,f.属性值即可 2、在需要引用的文件开头,输入for xxx import 属性,方法名 直接使用方法名(),属性即可调用
''' a.py content ''' name = 'a.py' def func(): print('这是a.py里面的函数')
''' b.py content ''' #方式一: import a as apy # print(apy.name) # # apy.func() #方式二 # from a import func,name # func() # print(name)
当某个文件中存在测试代码,此时如果其他地方import该文件,会执行该测试代码,此时可将测试的代码放在 if __name__=='__main__'条件语句下,此时只有本文件才会执行该条件下代码,其他import导入的地方不会执行测试代码,因为__name__是环境变量,会取当前的文件名称,当从其他文件import时,__name__不在与__main__相等
二、导入不同目录下文件
首先,看下import模块工作原理
import 导入顺序:1、首先会自动查下当前目录下是否包含该文件,如果包含,则使用import xxx 即可。
2、如果当前目录下查询不到该文件时,则会查询python的环境变量。(使用import sys sys.path可查询目前所有的python变量)
问题:现在需要在day4下 导入目录.py文件引用 day5下的tools.py的方法,那么该如何引用?
首先,import必须使用环境变量,那么就通过sys.path.insert或者sys.path.append将day5目录添加到python环境变量中
import sys print(sys.path) sys.path.insert(0,r'E:Python_testBestTest_python_exeday5') # #系统自动将父级目录Python_test插入环境变量 # print(sys.path) # sys.path.append('E:\Python_test\BestTest_python_exe\day5') #路径前加r,表示元字符,不会转义,或者使用\
输出path结果:
['E:\Python_test\BestTest_python_exe\day4', 'E:\Python_test', 'E:\Program Files\JetBrains\PyCharm 2019.3.2\plugins\python\helpers\pycharm_display',...]
['E:\Python_test\BestTest_python_exe\day5', 'E:\Python_test\BestTest_python_exe\day4', 'E:\Python_test', 'E:\Program Files\JetBrains\PyCharm 2019.3.2\plugins\python\helpers\pycharm_display',....]
注意:此时系统会自动将项目根目录的项目导入python系统环境变量,即 'E:\Python_test'
此时有两种方式导入:
#方式一:from 目录 import 文件 from BestTest_python_exe.day5 import tools result = tools.test('ggg') #不报错 #方式二:from 目录.文件 import 方法名 # from BestTest_python_exe.day5.tools import test 也没有问题 # result = test('ggg')
三、引入某个目录下多个文件
我们知道是无法直接通过import 目录来引用,必须使用import 文件格式
如下图,如果day 导入目录.py想引用day5 下多个文件怎么处理?
在day5目录下,新建一个文件名为 __init__.py文件,在__init__.py文件中输入 print('__init__') ,此时在day4 导入目录文件中输入 import BestTest_python_exe.day5,执行导入目录文件,输出:__init__
__init__.py文件可以将文件夹(也就是目录)变成模块包,变成包之后就可以任意的导入模块包下面的各种文件
结论:在import 目录,此时会自动自行目录下的__init__.py文件中的代码
此时 将__init__.py文件内容修改为
from . import tools,a,b,c #从当前目录导出所有的py文件
此时就可以使用 文件.方法名 文件.属性 的方式了