Python学习笔记-模块

简介:

模块:

    顶层文件(也是模块文件)

    模块文件

模块在物理形式上表现为.py结尾的代码文件

Python中,模块本身也是对象,所以模块也有变量,函数,类

在一个模块的顶层定义的所有变量都在被导入时成为了被导入模块的属性

查看标准库模块:

1
help ( 'modules' )

顶层文件:包含了程序的主要控制流程

模块文件:为顶层文件或其他模块提供各种功能组件

 

import module [,module1[,module2]]语句    导入模块

    导入指定的整个模块,包括生成一个以模块名命名的名称空间

    导入模块别名(有别名以后不能再使用原名,防止重复的名字空间):

    import module as module_alias

 

from-import语句(负面作用:会导致属性覆盖)

    常用于只导入指定模块的部分属性至当前名称空间

    from module import name1[,name2[,name3]]

 

import和from-import是赋值语句

    import和from是可执行语句,类似于def,因此他们嵌套再if测试中,出现def中等等


import和from都是隐形的赋值语句

    如果本程序中有声明变量a = 10 ,导入的模块中也有变量a = 20,那么模块中的变量覆盖原程序的变量,此时a = 20

 

import语句导入模块三个步骤:

    1.找到模块文件:在指定的路径下搜索模块文件(依次查找,查到就停止)

            搜索的路径:程序的主目录,PythonPath目录(如果设置了此变量),标准链接库目录,任何.pth文件的内容(如果存在.pth文件)

1
2
3
In [ 9 ]:  import  sys
In [ 11 ]:  print  (sys.path)
[' ', ' / usr / local / python361 / bin ', ' / usr / local / python361 / lib / python36. zip ', ' / usr / local / python361 / lib / python3. 6 ', ' / usr / local / python361 / lib / python3. 6 / lib - dynload ', ' / usr / local / python361 / lib / python3. 6 / site - packages ', ' / usr / local / python361 / lib / python3. 6 / site - packages / ipython - 6.1 . 0 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / pexpect - 4.2 . 1 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / Pygments - 2.2 . 0 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / prompt_toolkit - 1.0 . 14 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / traitlets - 4.3 . 2 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / simplegeneric - 0.8 . 1 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / pickleshare - 0.7 . 4 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / decorator - 4.0 . 11 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / jedi - 0.10 . 2 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / ptyprocess - 0.5 . 1 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / wcwidth - 0.1 . 7 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / six - 1.10 . 0 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / ipython_genutils - 0.2 . 0 - py3. 6.egg ', ' / usr / local / python361 / lib / python3. 6 / site - packages / ipython - 6.1 . 0 - py3. 6.egg / IPython / extensions ', ' / root / .ipython']

 

例,新建一个模块,让程序能够搜索到该模块文件

1
2
3
4
[root@kurol ~] # mkdir -pv /opt/python361/ 
mkdir: created directory ` / opt / python361 / '
[root@kurol ~] # touch /opt/python361/mymod.py
[root@kurol ~] # vim /opt/python361/mymod.py
1
2
3
4
5
6
7
8
9
10
11
#! /usr/bin/python36
#
=  10
def  printInfo():
     print  +  30
class  Mym():
     im  =  'hello Mym'
     def  __init__( self ,x):
         self .name  =  x
     def  printName( self ):
         print  self .im,  self .name


直接导入会搜索不到

1
2
3
4
5
6
In [ 13 ]:  import  mymod
- - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
ModuleNotFoundError Traceback (most recent call last)
<ipython - input - 13 - 7215bcbec8da in  <module>()
- - - - 1  import  mymod
ModuleNotFoundError: No module named  'mymod'

 

添加sys.path路径

1
2
3
4
5
In [ 14 ]: sys.path.append( '/opt/python361' )
In [ 15 ]:  import  mymod
In [ 16 ]:
In [ 17 ]:  print  (mymod.a)
10

   2.编译成字节码:文件导入时就会编译,因此,顶层文件的.pyc字节码文件在内部使用后会被丢弃,只有被导入的文件才会留下.pyc文件

   

   3.执行模块的代码来创建其所定义的对象:执行里面的顶层文件

 

如果一个模块被导入,则__name__属性保存的是自己的模块名称

如果不是被导入,而是自己执行,则__name__属性保存的是__main__

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
[root@kurol python361] # cat /opt/python361/mymod.py 
#! /usr/bin/python36
#
=  10
def  printInfo():
     print  +  30
class  Mym():
     im  =  'hello Mym'
     def  __init__( self ,x):
         self .name  =  x
     def  printName( self ):
         print  self .im,  self .name
if  __name__  = =  '__main__' :            ##自我测试测试代码
     printInfo()
     ins1  =  Mym( 'jerry' )
     print  ins1.im
     print  ins1.name
1
2
In [ 27 ]: mymod.__name__
Out[ 27 ]:  'mymod'
1
2
3
4
[root@kurol python361] # python mymod.py 
40
hello Mym
jerry

 


注意:

第一次导入才会执行三个步骤,重复导入没有意义,只是在内存中提取已加载的模块。

reload()可用于重新加载模块








      本文转自谢育政 51CTO博客,原文链接: http://blog.51cto.com/kurolz/1935028,如需转载请自行联系原作者

相关文章
|
3天前
|
Python
【Python进阶(五)】——模块搜索及工作目录
【Python进阶(五)】——模块搜索及工作目录
|
18天前
|
机器学习/深度学习 存储 Python
|
2天前
|
Python
在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存
【5月更文挑战第12天】在Python中,利用`os模块`的`path.exists()`函数可判断文件是否存在,该函数对路径进行检查,存在则返回True,不存在则返回False。示例代码展示了如何检查'example.txt'文件是否存在并相应打印消息。此外,`os.path.isfile()`用于确认路径是否为文件,仅当是文件时返回True,否则返回False,同样配以示例说明其用法。
12 2
|
5天前
|
Python Windows
python中的异常与模块
python中的异常与模块
10 1
|
14天前
|
JSON 数据格式 Python
Python标准库中包含了json模块,可以帮助你轻松处理JSON数据
【4月更文挑战第30天】Python的json模块简化了JSON数据与Python对象之间的转换。使用`json.dumps()`可将字典转为JSON字符串,如`{&quot;name&quot;: &quot;John&quot;, &quot;age&quot;: 30, &quot;city&quot;: &quot;New York&quot;}`,而`json.loads()`则能将JSON字符串转回字典。通过`json.load()`从文件读取JSON数据,`json.dump()`则用于将数据写入文件。
18 1
|
15天前
|
Python
Python实现压缩解压---tarfile模块详解
Python实现压缩解压---tarfile模块详解
|
15天前
|
Linux Python Windows
Python中time和datetime模块详解
Python中time和datetime模块详解
|
16天前
|
存储 Linux 数据安全/隐私保护
python的压缩模块zipfile详解
python的压缩模块zipfile详解
|
16天前
|
Linux Python Windows
python的os模块详细解读(二)
python的os模块详细解读(二)
|
16天前
|
移动开发 Linux Shell
python的os模块详细解读(一)
python的os模块详细解读(一)
python的os模块详细解读(一)