Python - 模块module


1、什么是模块

Python中,一个.py文件就称之为一个模块。
那么使用模块有什么好处呢?html

(1)提升了代码的可维护性。
(2)代码没必要从零开始,当一个模块编写完毕后,就能够被其余地方应用。
(3)能够避免函数名和变量名冲突,相同的函数名和变量能够存放在不一样的模块中,可是要注意尽可能不要与内置函数名字冲突。
Python全部的内置函数: https://docs.python.org/3/lib...

为避免模块名冲突,python又引入了按目录来阻止模块冲突的方法,称为(python package)。
一个abc.py的文件就是一个名字为abc的模块,一个xyz.py的文件就是一个名字为xyz的模块。假如abcxyz这两个模块名字与其余模块冲突了,因而咱们能够经过不一样的包来组织模块,避免模块冲突。
则可为:python

↓ mycompany      # 按目录存放
     _init_.py   # 模块名:mycompany
     abc.py      # 模块名:mycompany.abc
     xyz.py      # 模块名:mycompany.xyz

引入了包之后,只要顶层的包名不与别人冲突,那全部模块都不会与别人冲突。
每个包目录下都会有一个_init_.py的文件,这个文件是必须存在的,不然python就把这个目录当成普通目录,而不是一个包。
_init_.py能够是空文件,也能够有python代码,由于_init_.py自己就是一个模块。linux

2、使用Python自带模块

Python内置了不少很是有用的模块,只要安装完毕,这些模块就能够经过import马上导入使用。
例以下列小程序:以自建的sys模块,编写一个hello的模块hello.py 小程序

# !/usr/bin/env python    # -1-
# -*-coding:utf-8 -*-     # -2- 
_author_ = 'xionglp'      # 使用_author_变量把做者写进去

import sys   

def test(): 
    args = sys.argv  
    if len(args) == 1: 
        print ('hello,world!') 
    elif len(args) ==2: 
        print('hello,%s !'% args[1]) 
    else: 
        print('too many arguments!') 
if __name__ == '__main__':
    test()

说明:app

  • 注释 # -1- :让该.py文件直接在unix/linux/mac上运行
  • 注释 # -2- :.py文件使用标准UTF-8 编码
  • import sys:导入sys模块。以后即可以利用sys这个变量,访问sys模块的全部功能。
    sys模块有一个argv变量,用list存储了命令行的全部参数。argv至少有一个元素,由于第一个参数永远是该.py文件的名称。
  • 当在命令行运行hello.py文件时,python解释器就把一个特殊变量__name__置为__main__。若是在其余地方导入该模块时,if判断将失败,即if仅在此模块单独运行时生效。所以这种if测试可让一个模块经过命令行运行时执行一些额外的代码,最多见的就是运行测试。

在交互式环境(cmd)中导入该模块:函数

>>> import hello                         
>>> hello.test()                   
hello, world!

3、安装使用第三方模块

除了Python本身的包,还能够安装安装第三方模块。第三方包安装是经过包管理工具pip完成的。
通常来讲,第三方库都会在Python官方的pypi.python.org网站注册。因此要安装一个第三方库,必须先知道该库的名称,能够在官网或者pypi上搜索。好比Pillow的名称叫Pillow,所以,安装Pillow的命令就是:pip install Pillow工具

  • 步骤1:找到安装Python路径中的easy_install.exe,例如:D:PythonScripts
  • 步骤2:打开cmd,输入安装命令:easy_install.exe pip (pip安装成功)
  • 步骤3:在cmd下执行pip,输入命令:pip install pillow

以下:
clipboard.png测试

安装成功后即可以使用Pillow了。其余经常使用的第三方库还有:MySQL的驱动、用于科学计算的NumPy库等等。网站

pip升级:
在使用pip进行安装时,有时候会提示pip的版本过低,须要upgrade。提示会给出要执行的语句,按照提示执行就行。
执行命令:python –m pip install –upgrade pip编码

4、模块搜索路径

咱们也能够导入本身写入的模块。当咱们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,若是找不到,就会报错,例如:

clipboard.png

默认状况下,Python解释器会搜索当前目录、全部已安装的内置模块和第三方模块,搜索路径存放在sys模块的path变量中:

>>>import sys
>>>sys.path

若是咱们要添加本身的搜索目录,有两种方法:

  • 法一:直接修改sys.path,添加要搜索的目录,这种方法是在运行时修改,运行结束后失效。
>>> import sys
>>> sys.path.append('/Users/xionglp/my_py_scripts')
  • 法二:设置环境变量PYTHONPATH,该环境变量的内容会被自动添加到模块搜索路径中。设置方式与设置Path环境变量相似。注意只须要添加你本身的搜索路径,Python本身自己的搜索路径不受影响。

【补充点能量】if __name__ =="__main__":

  • __name__:为系统变量,有两个取值。当模块是被调用执行时,取值为模块的名字;当模块是直接执行时,则该变量取值为__name__
  • if __name__ == "__main__"实现的功能:可让模块既能够导入到别的模块中用,也能够本身执行。
英文解释说: make a script both importable and executeable

例如:新建模块atest.py

# !/usr/bin/env python3
# -*- coding:utf-8 -*-
'a test module'
def addFunc(a, b):
    return a + b
print('a_test_module\'s result is ', addFunc(1, 1))

新建模块anothertest.py

# !/usr/bin/env python3
# -*- coding :utf-8 -*-
'another test module'
import  atest
print('调用another test module模块执行的结果时:',atest.addFunc(12,23))

运行:

D:\Python_project>python atest.py
a_test_module's result is  2
D:\Python_project>python anothertest.py
a_test_module's result is  2
调用another test module模块执行的结果时: 35

说明:当运行anothertest.py的时候,先运行了atest.py,再运行anothertest.py。
若不但愿出现atest的内容,python提供了一个系统变量:__name__。能够把被调用的测试代码写在if语句里,当调用该module时,此时的__name__取值为该模块的名字,因此if判断为假,不执行后续代码以下:

if __name__ == '__main__':`
       print ('atest的计算结果:',addFunc(1,1))

则运行结果为:

D:\Python_project>python anothertest.py
调用another test module模块执行的结果时: 35

此时咱们就获得了预期结果,不输出多余的结果。


❤ thanks for watching, keep on updating...

相关文章
相关标签/搜索