一、import引入
# import语句可以在程序中任意位置使用,为了防止重复导入模块,第一次导入后就将模块名加载到内存了, # 后面的import语句仅仅对已经加载到内存的模块对象增加一次引用,不会重新执行模块内的语句
import time # 只是第一次导入时才执行 time.py 代码, import time import time import time
1、添加任意路径下的模块
把路径添加到系统环境变量path当中,
执行命令时,系统会自动按照路径找到模块,从而引入
如果找不到当前模块所在的路径,直接报错
将自定义绝对路径添加至sys.path中:
二、from ... import ...
from time import thread_time
三、from ... import *
# 把time中所有的不是以下划线开头的名字都导入到当前.py文件 from time import *
四、为模块起别名
import time as T print(T.time())
五、__all__ 可以设置导入的范围
__all__ = ["leader","staff"] leader = "Lsir" staff = "Zsir" def task1(): taskone="{} asked {} to type a document".format(leader,staff) print(taskone) def task2(): tasktwo="{} asked {} to implement a functional module".format(leader,staff) print(tasktwo) class MyClass(): name = "yuemo"
import sys sys.path.append("/Users/atsukokoshi/Desktop") from Ctmmodule import * print(leader) task1()
# 报错:task1 未定义
六、魔术属性的使用
# 如果当前文件是直接运行的,返回__main__ # 如果当前文件是间接导入的,返回当前文件名(模块名) # 文件直接被执行的时候返回__main__ # 当成模块被导入的时候,返回模块名本身;
七、包
# 1.文件就是模块,文件夹就是包 # 2.__init__.py 对包(文件夹)进行初始化的脚本文件 # 导入包的时候,系统自动调用__init__.py文件,把init文件里面成员进行导入 # 3.可以通过__init__间接导入其他模块
__all__ = ["ceshi301"] ceshi301 = 301 ceshi302 = 302 # 通过初始化__init__文件间接导入 from package1 import mypath
def join(): print("我是join函数") def getsize(): print("我是getsize函数")
import package1 print(package1.ceshi301) # """ # 2.导入包下的某些模块 # 方法一 """ import package1.mypath package1.mypath.join() """ # 方法二(模拟os.path.join写法) """ import package1 package1.mypath.join() package1.mypath.getsize() """ # from ... import 从包导入相应成员 from package1 import ceshi301 print(ceshi301) # 从包当中导入模块 from package1 import mypath mypath.join() # 引入包下的模块下的具体成员 from package1.mypath import getsize getsize() # 在引入的同时,起别名 from package1.mypath import getsize as gs , join as j gs() j()
八、单入口模式
# 分模块不能单独进行调用,统一由主文件main进行调用 # 模块之间的互相嵌套导入,使用相对路径实现 # 单入口文件必须和包在同一层级,包里面可以含有各种包和文件 # 相对路径导入的落脚点在:模块或其中的具体成员身上
目录结构为:
ceshi1000 = 1000 ceshi1001 = 1001 from . import pgone_2 print(pgone_2.ceshi2001)
报错信息:
from package2.pkg1 import pgone_1
1、main文件作文主文件,通过相对路径调用各包和模块
# . 代表当前 from . import pgone_2 print(pgone_2.ceshi2001) # ceshi2000 from .pgone_2 import ceshi2000 print(ceshi2000) # .. 上一级 from .. import pkg2_module1 print(pkg2_module1.ceshi3000) from ..pkg2_module1 import ceshi3001 print(ceshi3001) from ..pkg2 import pgtwo_2 print(pgtwo_2.ceshi4000) from ..pkg2.pgtwo_2 import ceshi4001 print(pgtwo_2.ceshi4001) """ """ . 当前路径 .. 上一级路径 ... 上一级的上一级 .... 上一级的上一级的上一级 ..... (这里的点是无限的) from .......................................... import 模块