Python_12模块基础、导入、执行顺序

一、模块

在Python中,一个.py文件就称之为一个模块(Module)。即一个文件看作一个独立的模块,一个模块也可以看作是一个文件。使用模块可以避免函数名和变量名冲突。相同名字的函数和变量完全可以分别存在不同的模块中,因此,在编写模块时,不必考虑名字会和其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。

1.内置模块:如sys,os,subprocess,time,json等等,使用代码查看模块print(help('module'))
2.自定义模块:不能和Python自带模块名称冲突,例如系统自带了sys模块,自己定义的模块就不能命名为sys.py,否则将无法导入系统自带的sys模块。
3.开源模块:公开的第三方模块,如https://pypi.org/。可以使用pip install 安装,类似于手机app应用市场或者maven仓库。

 1 #第四章第一节模块基础2022.08.14周日晚
 2 #用于导入模块,import放在程序前面,且按照Python标准库模块、Python第三方模块、自定义模块的顺序从上到下排开
 3 
 4 import os         #内置模块放在最前面
 5 import sys
 6 # from Calc02 import mul     #导入部分
 7 # from Calc02 import *       #导入模块下的所有,一般不推荐使用
 8 from Calc02 import mul as m  #导入的时候重命名模块
 9 
10 
11 m(3,4)                #上面导入的时候已经将Calc02模块下的mul函数重命名为m,所以用m()
12 # mul(3,4)            #如果部分导入mul,那么也只能使用Calc02中的mul函数
13 # add(3,4)
14 # div(3,4)

二、模块导入

1、import语句:用于导入模块,import放在程序前面,且按照Python标准库模块、Python第三方模块、自定义模块顺序从上到下排开。语法如下:
     import module  导入后,使用  模块名.函数名   引用

2、from import语句:常用于只导入指定模块的部分属性或模糊导入,语法如下:
      from module import name1[,name2][,...nameN]
      注意:不推荐使用:from module import *
      使用as更换名称:from module import name1 as name2  通过这种方式引入的时候,调用函数只能给出函数名,不能给出模块名,但是当两个模块中含有相同名称函数的时候,后面一次引入会覆盖前一次引入。

三、模块导入执行顺序

1、找到模块文件:在模块搜索路径下搜索模块文件
     程序的主目录
     PYTHONPATH目录
     标准链接库目录Lib
2、编译成字节码:文件导入时会编译,因此,顶层文件的.pyc字节码文件在内部使用后会丢弃,只有被导入的文件才会留下.pyc文件
3、导入import(或者重载reload)时,Python会立即执行模块文件的顶层程序代码(不再函数内的代码),而位于主函数内的代码直到函数被调用后才会执行,reload()用于重载加载模块。

 1 #第三章模块导入规则及应用,该例子需要使用windows的cmd命令执行
 2 import sys
 3 
 4 for p in sys.path:      #先打印所有路径
 5     print(p)
 6 sys.path.append('E:\Python_code\project01')  #工作中遇到模块找不到的时候,通过sys.path.append('path')函数来导入自定义模块所在的目录,加上该模块后,去cmd切换到该路径下执行python Demo06就可成功了
 7 
 8 import Test2
 9 # print(sys.path)       #包含了模块所有的搜索路径
10 Test2.pri()

 

备注:
1、如果不想如第三点那样执行导入模块的代码,常用解决方案是:在python模块中需要测试或者直接运行的代码前加
if(__name__=='__main__'):
2、通过sys.path.append(path)函数来导入自定义模块所在的目录

 1 #模块导入规则及应用
 2 def pri():
 3     print('hello')
 4 
 5 
 6 if(__name__ == 'main'):  #通过if(__name__ == 'main')可以避免该模块被其它导入(import或reload)时,而立即执行该模块的顶层程序代码
 7     print('hello1')      #程序顶层代码(第一行缩进的)
 8 
 9 
10 # print('hello1')        #这是程序的顶层代码,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件
11 # print(__name__)        #被自己模块调用时是__main__,被其它模块调用时会是其他模块的文件名
posted @ 2022-08-24 09:53  TesterWei  阅读(353)  评论(0编辑  收藏  举报