1python中的模块
在python中有一个概念叫做模块,这个和C语言中的头文件以及JAVA中的JAVA包很类似,比如在PYTHON中要调用sqrt函数,必须 用import关键字引入math这个模块。
通俗点,模块就好比是工具包,要想使用这个工具包中的工具(就好比函数),就必须导入这个模块。
import
在python中用关键字import来引入某个模块,比如要引入模块math,就可以文件开始的地方使用import math来引入。
import module1,module2...
在调用math模块中的函数时,必须 这样引用
模块名.函数名
importrandomprint(random.randint(0,5))
from ...import...
Python的from语句让你从模块中导入一个指定的部分到当前命名空间中:
from modulename import name[,name2...]
例如,要导入模块fib的fibonacci函数:
from fib import Fibonacci
注意:不会把整 个fib模块导入到当前的命名空间中,它中会将fib里的fibonacci单个引入。fromrandomimportrandintprint(randint(0,9))#直接写方法名
from...import*
把一个模块的所有内容全都导入到当前的命名空间,只需要如下声明:
from modname import *
注意:这提供了一个简单的方法来导入一个模块中的所有项目,然而这种声明不该被过多使用,因为不同模块可能存在一样的方法名字,导致后面导入的模块的方法覆盖了前面模块的同名方法。
as
给导入的模块重新命名importrandomasrdprint(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,还有' '也为nulldefisnull( str ):if notstr:return True
elifstr.strip() =='':return True
else:return False
deftest1():print("……中的test1方法……")
2.调用自己编写的模块(main.py)importmodule1
a ='a'print(module1.isnull(a))
module1.test1()frommodule1importisnull,test1
a ='a'print(isnull(a))
test1()
模块的测试和模块中的__all__
可以根据__name__变量的结果 能够判断出,是直接执行的python脚本还是被引入执行的,从而能够有选择性的执行代码#写一个工具方法,判断字符 是否为null,当字符串为none为null,还有''还为null,还有' '也为null__all__=['isnull']#表示被引用的方法,在from module1 import *有效,defisnull( str ):if notstr:return True
elifstr.strip() =='':return True
else:return False
deftest1():print("……中的test1方法……")# print(isnull(" ")) #这行虽然是测试代码,但只要被当作模块被导入就会自动执行#print(__name__)if__name__=='__main__':#由python解释器主动执行该模块代码,测试时执行,当被当作模块调用时,以下代码不执行print(isnull(" "))
2python中的包
引入包,包就是一个目录,把多个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))
'''importmy_package#引入包中的模块,方法3在包目录下的__init__.py文件 写代码from . import模块1a ='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文件fromdistutils.coreimportsetup#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.循环导入,两个模块互相导入