1 python中的模块
在python中有一个概念叫做模块,这个和C语言中的头文件以及JAVA中的JAVA包很类似,比如在PYTHON中要调用sqrt函数,必须 用import关键字引入math这个模块。
通俗点,模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就必须导入这个模块。
import
在python中用关键字import来引入某个模块,比如要引入模块math,就可以文件开始的地方使用import math来引入。
import module1,module2...
在调用math模块中的函数时,必须 这样引用
模块名.函数名
import random
print(random.randint(0,5))
from ...import...
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中:
from modulename import name[,name2...]
例如,要导入模块fib的fibonacci函数:
from fib import Fibonacci
注意:不会把整 个fib模块导入到当前的命名空间中,它中会将fib里的fibonacci单个引入。
from random import randint
print(randint(0,9))# 直接写方法名
from...import*
把一个模块的所有内容全都导入到当前的命名空间,只需要如下声明:
from modname import *
注意:这提供了一个简单的方法来导入一个模块中的所有项目,然而这种声明不该被过多使用,因为不同模块可能存在一样的方法名字,导致后面导入的模块的方法覆盖了前面模块的同名方法。
as
给导入的模块重新命名
import random as rd
print(rd.randint(0,5))
查看包的代码:
>>> import random
>>> random.__file__
'D:\Program Files\Python\Python37\lib\random.py'
定义自己的模块
在python中,每个python文件都可以作为一个模块,模块的名字就是文件的名字。
例,调用自定义模块
1. 编写一个module1.py的模块
# 写一个工具方法,判断字符 是否为null,当字符串为none为null,还有''还为null,还有' '也为null
def isnull( str ):
if not str:
return True
elif str.strip() == '':
return True
else:
return False
def test1():
print("……中的test1方法……")
2. 调用自己编写的模块(main.py)
import module1
a = 'a'
print(module1.isnull(a))
module1.test1()
from module1 import isnull,test1
a = 'a'
print(isnull(a))
test1()
模块的测试和模块中的__all__
可以根据__name__变量的结果 能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行代码
# 写一个工具方法,判断字符 是否为null,当字符串为none为null,还有''还为null,还有' '也为null
__all__=['isnull'] # 表示被引用的方法,在from module1 import *有效,
def isnull( str ):
if not str:
return True
elif str.strip() == '':
return True
else:
return False
def test1():
print("……中的test1方法……")
# print(isnull(" ")) # 这行虽然是测试代码,但只要被当作模块被导入就会自动执行
#print(__name__)
if __name__=='__main__': #由python解释器主动执行该模块代码,测试时执行,当被当作模块调用时,以下代码不执行
print(isnull(" "))
2 python中的包
引入包,包就是一个目录,把多个py文件放到同一个文件夹下。
执行顺序:当前目录-》python系统目录
Ø 使用” import文件夹.模块 “ 的方式导入,python3可以导入,python2不行
Ø 使用”from 文件夹 import 模块 “的方式导入,python3可以导入,python2不行
Ø 在包的文件夹上创建__init__.py文件,虽然 文件内容没有,但是python2可以用了。在python2中,有一个目录,并且目录下有一个__init__.py文件,才认为是包。
有__init__.py文件在python3中没有错,以后均在包的目录上新建一个__init__.py文件。
Ø 在__init__.py文件中写入
from . import 模块1
from . import 模块2
那么可以使用“import 文件夹” 导入,也可以使用” from 文件夹 import 模块”的方式导入
#encoding=UTF-8
'''
import my_package.module1 # python3,引入包中的模块,方法1
a = 'a'
print(my_package.module1.isnull(a))
from my_package import module1 # python3,引入包中的模块,方法1
a = 'a'
print(module1.isnull(a))
'''
import my_package # 引入包中的模块,方法3 在包目录下的__init__.py文件 写代码from . import 模块1
a = 'a'
print(my_package.module1.isnull(a))
模块/包的发布
1. 发布的模块/包的目录结构:
[root@localhost test_pub]# tree
.
├── my_package #要发布的包名
│ ├── __init__.py
│ ├── module1.py #待发布的模块1
│ ├── module2.py
│ └── __pycache__
│ ├── __init__.cpython-37.pyc #.pyc是自解码文件
│ ├── module1.cpython-37.pyc
│ └── module2.cpython-37.pyc
└── setup.py # 与包同级
2. 编辑setup.py文件
py_modules需要指明所需包含的py文件
from distutils.core import setup
#setup(name='压缩包的名字',version='1.0',description='描述',author='作者',py_modules=['suba.aa','suba.bb'])
setup(name='my_pub',version='3.7',description='没有',author='me',py_modules=['my_package.module1','my_package.module2'])
3. 构建模块
python setup.py build
4. 生成发布压缩包
python setup.py sdist
模块/包的安装、使用
1. 安装的方式
找到模块的压缩包-》解决-》进入文件夹-》执行命令”python setup.py install”
注意:如果在install的时候,执行目录安装,可以使用”python setup.py install –prefix 安装路径
2. 模块的引入
在程序中,使用 “from import ”即可完成对安装的模块的使用
from 模块名 import 模块名或*
1. 导入模块的路径设置
Ø 查看模块搜索路径
Ø 添加搜索路径
Ø 重新导入模块
from imp import *
reload(模块名)
2. 查看已经安装的模块help()
3. 模块内定义的所有名称dir()函数
dir()函数能够返回由对象所定义的名称列表,例如:这一对象是一模块,则dir()函数可以找到模块内定义的所有名称(含函数、类、变量),以一个字符串列表的形式返回
dir()是有参数的,如果参数是模块名称(当然参数也可以是类,函数等),那么将返回这一指定模块的名称列表。如果没有参数,那么函数将返回当前文件(即当前模块的名称列表):比如你在test2.py下指定dir(test),那么返回test模块的名称列表,如果是dir(),那么返回test2.py名称列表
4. 循环导入,两个模块互相导入