python模块(module)与包

目录

1. 导入模块

2. 定义自己的模块

3. 为模块编写说明文档

4. 加载模块

1)使用环境变量

2)将模块放在默认的模块加载路径下;

5. 包

1) 定义包

2)导入包

6. 查看模块包含的内容

1)查看模块含有哪些功能

2)使用__doc__属性查看文档

3)使用__file__属性查看模块的源文件路径


1. 导入模块

使用import导入模块,有两种方式:

1)导入整个模块

 import 模块名1 [ as 别名1 ] ,模块名2[ as 别名2 ] ,...

访问模块成员需要使用模块名调用;

可一次导入多个模块;

可以为模块指定别名;

#导入sys整个模块
import sys
#使用模块名访问模块中的成员
prrnt(sys . argv[0])

2)导入模块中的指定成员

from 模块名 import 成员名1 [ as 别名1 ] ,成员名2[ as 别名2 ] ,…

访问模块成员直接使用成员名或成员别名即可;

#导入sys模块内的argv成员
from sys import argv
#直接使用成员名访问
print (argv[O])

 3) 导入模块的本质

不管使用哪种方式导入,首先都会将模块的全部代码加载到内存并执行

导入整个模块时将整个模块内容赋值给与模块同名的变量,在该模块中定义的所有程序单元都相当于该module对象的成员。

使用from.. .import 导入模块中部分成员,只导入指定变量、函数等成员单元;

2. 定义自己的模块

模块就是Python 程序!任何Python 程序都可作为模块导入。

模块文件的文件名就是它的模块名,比如module1.py 的模块名就是module1 。

3. 为模块编写说明文档

只要在模块开始处定义一个字符串直接量即可。例如,在module1.py 文件的第一行代码之前添加如下内容。

'''
这是我们编写的第一个模块,该模块包含以下内容
my book       :      字符串变量
say hi        :     简单的函数
User          :     代表用户的类
'''

这段字符串内容将会作为该模块的说明文挡,可通过模块的__doc __属性来访问文档。

4. 加载模块

为了让Python 能找到我们编写(或第三方提供)的模块,可以用以下两种方式来告诉它:

  • 使用环境变量;
  • 将模块放在默认的模块加载路径下;

1)使用环境变量

  • 在Windows平台上设置环境变量

“此电脑”——“属性”——“高级系统设置”——“环境变量”——“用户变量”

“新建用户变量”——“变量名”文本框内输入PYTHONPATH,表明将要建立名为PYTHONPATH 的环境变量:在“变量值”文本框内输入模块所在文件夹的路径,多条路径使用分号分隔开;(注:可以用一个点” . “表示一条路径,这个点代表当前程序运行的路径,表明当运行Python 程序时, Python总能从当前路径加载模块)

2)将模块放在默认的模块加载路径下;

如果要安装某些通用性模块,这种模块应该直接安装在Python 内部,以便被所有程序共享,此时就可借助于Python 默认的模块加载路径。

Python 默认的模块加载路径由sys.path 变量代表, 因此可通过执行命令来查看Python 默认的模块加载路径:

import sys, pprint
# 使用pprint模块下的pprint()函数代替普通的print()函数,这是因为如果要打印的内容很多,使用pprint可以显示更友好的打印结果。
pprint.pprint(sys.path)

通常来说,我们应该将Python的扩展模块添加在lib\site-packages 路径下,它专门用于存放Python 的扩展模块和包


5. 包

对于一个模块,往往会具有很多程序单元,包括变量、函数和类等,如果将整个模块的所有内容都定义在同一个Python 源文件中,这个文件将会变得非常庞大;

所以使用几个Python源文件定于一个模块,将这几个Python源文件存储到一个文件夹中,这就是包。

包本质上还是模块;

1) 定义包

定义一个最简单的的包分两步进行:1)创建一个文件夹,文件名就是包名;2)在该文件夹中创建一个__init__.py 文件;

2)导入包

使用“ import 包名 ”导入一个包的本质就是导入该包下的__init__.py文件,然后将整个文件内容赋值给与包同名的变量,该变量的类型是module。

几种导入包的方式如下:

# 导入test_packet包,实际上就是导入包下的__init__.py 文件
#执行这条导入语句之后,程序只能使用test_packet目录下的__init__.py文件中定义的程序单元。
import test_packet

# 导入test_packet包下的test模块, 实际上就是导入test_packet目录下的test.py文件
# 使用这种导入方式,访问test.py文件中定义的成员变量需要使用test_packet.test作为前缀来调用
import test_packet.test
test_packet.test.describe()

# 导入test_packet包下的test2模块, 实际上就是导入test_packet目录下的test2.py文件
# 使用这种导入方式,访问test2.py文件中定义的成员变量需要使用test2作为前缀来调用
from test_packet import test2
test2.information()

__init__.py 文件的主要作用就是导入该包内的其他模块,程序调用该包的模块时不需要再次分别导入各个模块;

所以可以在每个包的__init__.py文件中导入该包的其他模块,程序调用该包时只需要导入该包就可以了;

# 从当前包中导入test模块, 当程序调用test模块中的成员时,格式为“ test_packet.test.成员变量名 ”
from . import test
# 如果在上一句代码的基础上加上这句代码,从test模块中导入所有成员变量, 当程序调用test模块中的成员时,格式为“ test_packet.成员变量名 ”
from .test import *

6. 查看模块包含的内容

1)查看模块含有哪些功能

有两种方法:1)dir()函数;2)模块本身提供的__all__变量(不是所有的模块都有这个变量);

1)dir函数

该函数可用于返回模块或类所包含的全部程序单元(包括变量、函数、类和方法等),但直接使用dir()函数默认会列出模块内所有的程序单元,包括以下画线开头的程序单元,而这些以下画线开头的程序单元其实并不希望被外界使用。

import string
import pprint
# 使用dir()函数
pprint.pprint(dir(string))

# ['Formatter',
#  'Template',
#  '_ChainMap',
#  '_TemplateMetaclass',
#  '__all__',
#  '__builtins__',
#  '__cached__',
#  '__doc__',
#  '__file__',
#  '__loader__',
#  '__name__',
#  '__package__',
#  '__spec__',
#  '_re',
#  '_string',
#  'ascii_letters',
#  'ascii_lowercase',
#  'ascii_uppercase',
#  'capwords',
#  'digits',
#  'hexdigits',
#  'octdigits',
#  'printable',
#  'punctuation',
#  'whitespace']

所以为了不显示以下画线开头的程序单元,使用改进方法:

import string
import pprint
# 使用dir()函数
list = [i for i in dir(string) if not i.startswith("_")]
pprint.pprint(list)

# ['Formatter',
#  'Template',
#  'ascii_letters',
#  'ascii_lowercase',
#  'ascii_uppercase',
#  'capwords',
#  'digits',
#  'hexdigits',
#  'octdigits',
#  'printable',
#  'punctuation',
#  'whitespace']

2)模块本身提供的__all__变量

import string
import pprint
# 使用__all__变量
pprint.pprint(string.__all__)

# ['ascii_letters',
#  'ascii_lowercase',
#  'ascii_uppercase',
#  'capwords',
#  'digits',
#  'hexdigits',
#  'octdigits',
#  'printable',
#  'punctuation',
#  'whitespace',
#  'Formatter',
#  'Template']

2)使用__doc__属性查看文档

3)使用__file__属性查看模块的源文件路径

 

你可能感兴趣的:(Python学习笔记)