1.绝对路径
open文件如果不在当前路径下,就要写绝对路径(从根据目录开始)
2.模块与包
***.py文件就是一个模块(module)
文件夹或目录就是包(package)(文件夹与目录的区别就是目录下包含__init__.py)
dir1 就是一个文件夹,dir2 就是一个目录
2.1引入模块
如下图,在同一个包下,module.py 下定义了一个变量 name 和一个函数 hello,
想在 lianxi.py 运行 name,hello
# from 模块名 import 变量,函数,类
from module import name,hello
print(name)
print(hello())
运行结果:
zhang san
hello!
2.2引入包
如下图,不在同一个包下,dir1包下有个模块dir1_module.py 下定义了一个变量 age,
想在 lianxi.py 运行 age
# from 包名.包名.模块名 import 变量,函数,类
# 有几层包名就写几层包名
from dir1.dir1_module import name
print(name)
运行结果:
18
想导入整个模块的话,如下操作
# from 包名 import 模块名
from dir1 import dir1_module
# 调用模块下的内容时,模块名.变量/函数/类
print(dir1_module.age)
from demo1 import module
print(module.hello())
运行结果:
18
hello!
若导入的模块下跟在用的模块下名字重复,如何解决,如下操作
# from ...import 变量/函数/类 as 别名
from dir1.dir1_module import age as dir1_module_age
age = 20
print(age) # 打印当前模块下定义的变量
print(dir1_module_age) #打印dir1_module模块下的age变量
运行结果:
20
18
不提倡用的一种导入方法:导入模块中所有的变量,函数,类
from module import *
print(name)
print(hello())
注意:最好每次都从项目的根目录开始查找
如:from dir1.dir1_module import age
# 查看当前系统下的路径
import sys
print(sys.path)
运行结果:
['E:\\lemon\\lianxi\\demo1', 'E:\\lemon\\lianxi', 'D:\\python\\PyCharm 2019.1.2\\helpers\\pycharm_display', 'D:\\python\\python38.zip', 'D:\\python\\DLLs', 'D:\\python\\lib', 'D:\\python', 'D:\\python\\lib\\site-packages', 'D:\\python\\PyCharm 2019.1.2\\helpers\\pycharm_matplotlib_backend']