python基础 import 模块 包

代码组织结构以及每个模块内容

 import_mod1.py初始内容如下,其余模块初始内容只是函数后缀的数字修改为与模块对应的格式,其余不变

1 def fun_1():
2     print("this is import_mod1")
3 fun_1()

import 导入模块

模块实际上就是实现一个完整功能的.py结尾的python文件,其内部可能有多个变量 函数 类等
几种常见导入方法
import 模块名1
import 模块名1, 模块名2
from 模块名 import *
from 模块名 import var, func, class
下面是import_mod1模块的代码
 1 def fun_1():
 2     print("this is import_mod1")
 3 fun_1()
 4 #import导入当前路径下其它模块,使用import导入该模块相当于解释器运行该模块,并赋值整个模块内容给模块名;如果模块内部有对函数调用则此处也会执行对应函数调用
 5 import import_mod1_1   #this is import_mod1_1
 6 import_mod1_1.fun_1_1() #this is import_mod1_1 使用import导入的模块如果需要使用其内部方法则以模块名.方法名 这种方式调用,先找到包名再找到对应方法
 7 #使用from 模块名 import 方法/* 导入该模块指定/所有方法相当于将对应代码拷贝到import语句的地方并且执行一遍
 8 from import_mod1_2 import * #this is import_mod1_2
 9 fun_1_2() #this is import_mod1_2 使用from 模块名 import 方法/* 导入该模块指定/所有方法调用时直接使用对应方法名,
10 # 此时被import模块代码已经写入到当前文件,这种模块导入方法需要注意同名对象覆盖问题,即不能有相同的两个变量
11 #跨包导入模块时只需要添加被导入模块的路径到环境变量即可,其余当前路径下导入没有区别,环境变量添加路径在导入包时详细介绍

import导入包

import_pac2 的__init__.py文件

1 from .  import import_mod2
2 from . import import_mod2_1

import_pac3 的__init__.py文件

1 from . import import_mod3
2 from . import  import_mod3_1
 1 #import导入包实际就是将对应包的__init__.py文件在导入命令行执行一遍,首先将new这个路径添加到环境变量中才能进行后续导包操作
 2 import sys, os
 3 sys.path.append( os.path.dirname( os.path.dirname( os.path.abspath(__file__) ) ) ) #abspath(__file__)获取当前文件的绝对路径,包含文件名;dirname向上取一级目录
 4 #import 包名  下面以导入import_pac2这个包为例.
 5 import import_pac2 #this is import_mod2  this is import_mod2_1  import导入包的本质就是此处执行包的__init__.py文件,与导入模块不同的是执行__init__.py,__init__.py涉及的模块如果模块内部有对函数调用则此处也会执行对应函数调用,如果函数有print语句等会在当前模块体现
 6 # 将整个包的内容赋值给包名,被导入包内的方式使用包名.模块名.方法调用
 7 import_pac2.import_mod2.fun_2()  #this is import_mod2
 8 
 9 #form 包名 import 模块 下面以导入import_pac3 import_mod3为例
10 from import_pac3 import import_mod3 #form 包名 import 模块与直接import包名唯一区别是调用模块方法不用在最前面使用包名。此种导入方法需要避免当前路径与被导入模块同名
11 
12 #from导入模块或者对象同名问题可以使用下面语法重命名,以规避同名问题
13 from import_pac3 import import_mod3 as import_pac3_mod3 #前面已经到导入过import_pac3实际上此语句不会执行
14 
15 #就导入模块和导入包后,模块内对应方法调用方式总结:如果import后面是方法名则直接使用该方法;其它情况则使用import后的包或者模块名+.一直到对应方法

猜你喜欢

转载自www.cnblogs.com/flags-blog/p/11968119.html