导入模块一般写在程序最前面,且顺序为:内置模块、第三方模块、自定义模块
一、模块(module)与包(package)
模块(module)可以理解为是一个.py文件,import 模块 相当于执行了 这个.py文件 包(package)可以理解为包含着__init__.py的文件夹,import 包 相当于执行了 对应的__init__.py文件 (一个包中可以包含多个模块/多个包) 以pycharm为例,包与普通文件夹的图片如下所示(如果把__init__.py文件删除,则图标变为普通文件夹的图标)
二、模块的import与from import 导入模块的语法: # 导入模块import 模块名 as 别名 # 执行模块名.py# 导入模块中某个函数/类/变量from 模块名 import 函数名/类名/变量 as 别名 # 也会执行模块名.py,但只能用所导入的函数名/类名/变量 查找模块的顺序: import sysprint(sys.path)# 输出包含多个文件夹路径的列表模块的查找顺序是根据sys.path列表中的路径顺序进行的,大致如下:
先找当前py文件的同级目录下是否有对应模块找当前项目目录下是否有对应模块找python解释器目录下是否有对应模块 导入模块的具体流程:判断内存中是否已加载了对应模块,如已加载则直接返回内存地址,如没加载则开辟一块内存,执行所导入的模块中的所有python代码。
内置变量__name__:每个python文件中都会有内置的__name__变量 直接运行该python文件的时候,__name__的值是__main__ 当以模块的形式导入该python文件时,__name__的值是模块名(比如abc.py则值就是abc)
比如以下python文件命名为a.py,当直接运行该文件则会打印出"测试案例",在其他python文件中import a时则不会打印出"测试案例"
def func():print("a模块里的func被调用了")class Student:def __init__(self,name):self.name = namedef eat(self, food):print(f"{self.name}在吃{food}")if __name__ == '__main__':print("测试案例") 三、包的import与from import 导入包中模块的语法: # 导入包import 包名 # 执行包名下的__init__.py# 直接导入模块(不常用)import 包名.(包名.)模块名# 导入包里某个模块(常用)from 包名(.包名) import 模块名# 导入包里某个模块的具体类、方法(常用)from 包名.(包名.)模块名 import (函数名/类名/变量)注意:from import语法中import后面不允许出现 "." !!!!!!!
示例: # 导入policy模块from glance.api import policy# 导入policy中Student这个类from glance.api.policy import Student