模块
"""
退出 Python 解释器后,再次进入时,之前在 Python 解释器中定义的函数和变量就丢失了。
因此,编写较长程序时,建议用文本编辑器代替解释器,执行文件中的输入内容,这就是编写脚本。
随着程序越来越长,为了方便维护,最好把脚本拆分成多个文件。
编写脚本还一个好处,不同程序调用同一个函数时,不用每次把函数复制到各个程序。
为实现这些需求,Python 把各种定义存入一个文件,在脚本或解释器的交互式实例中使用。
这个文件就是模块;模块中的定义可以导入到其他模块或主模块(
在顶层和计算器模式下,执行脚本中可访问的变量集)
"""
模块(module)可以是下述实体:
Python文件(.py)
Unix与Linux的共享对象,其后缀为.so
Windows的DLL,后缀为.pyd
目录,并应包含一个__init__.py文件
私有属性
"""
每个模块有自己独立的符号表,在模块内部的函数当作全局符号表来使用。
模块内部__xxx__这样的变量是特殊变量,可以被直接引用,但是有特殊用途,如下列。类似_xxx和__xxx这样的函数或变量就是非公开的(private),不应该被直接引用,即它们应视作模块私有的名字。
__name__属性,其值为模块名 .;当其值是'__main__'时,表明该模块自身在运行,否则是被引入。
__file__: 模块完整⽂文件名。
__dict__: 模块 globals 名字空间。
__doc__:模块定义的文档注释
内置函数 dir() 以字符串列表的形式返回指定模块内定义的所有名称。
每个 Python 类都拥有一个内置的类属性 __module__,它定义了这个类的模块的名字
from math import cos
cos.__module__
"""
卸载一个模块:
del sys.modules["moduleName"]
可⽤用 imp.find_module() 获取模块的具体⽂文件信息:
imp.find_module("numpy")
包(package)
"""
包,是多个模块的组织体系。目录只有包含一个叫做 __init__.py 的文件(哪怕是空文件)才会被认作是一个包。否则,Python就把这个目录当成普通目录。
__init__.py本身就是一个模块,而它的模块名就是包名。
Python3中的包,__init__.py文件并不是必须的。__init__.py文件在包或内部模块导入时自动执行,且仅执行一次。
可以有多级目录,组成多级层次的包结构。
如果包定义文件 __init__.py 存在一个叫做 __all__ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。
如果 __all__ 没有定义,使用 from 包.子包 import * 这种语法的时候,不会导入包里的任何子模块,只是把包和它里面定义的所有内容导入进来。
包内部的一个模块,可以如下引用这个包的其它模块:
from . import another_module
"""
导入包
"""
'不是导入模块'
import six
from Tkinter import Tk
import numpy as np
import pandas as pd
Python会在两个地方寻找模块或包:sys.path、
运行文件所在的目录。
python3采用绝对导入,即嵌套的import是根据最外层的运行文件的所在目录来导入。
相对导入的办法:
如果运行文件使用了相对导入,就必须进入package_name所在目录
一般相对导入自己编写的包比较多,其他导入使用从第三方包导入,不需要相对路径
import
一条 import 语句可以同时导入多个模块,以逗号分隔
import 将整个模块的全局符号表导入到当前模块的符号表中,可以使用模块中所有全局变量,类和函数
import 导入的模块,对其中的变量和函数访问时要加上模块名
导入的模块中相同函数名和变量名不会冲突,即函数,类全局变量等信息不相同
"""
- 1
- 2
- 3
- 4
- 5
- 6
- 7
- 8
- 9
- 10
- 11
- 12
- 13
- 14
- 15
- 16
- 17
- 18
- 19
- 20
- 21
- 22
注意:
"""
包的名称最好是唯一的,尽量不与内置函数相同,包的名称也浅显易懂
"""