资讯专栏INFORMATION COLUMN

Python - 模块module

ranwu / 1307人阅读

摘要:一什么是模块中,一个文件就称之为一个模块。所有的内置函数为避免模块名冲突,又引入了按目录来阻止模块冲突的方法,称为包。例如下列小程序以自建的模块,编写一个的模块。如果在其他地方导入该模块时,判断将失败,即仅在此模块多带带运行时生效。


一、什么是模块

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

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

为避免模块名冲突,python又引入了按目录来阻止模块冲突的方法,称为(python package)。
一个abc.py的文件就是一个名字为abc的模块,一个xyz.py的文件就是一个名字为xyz的模块。假如abcxyz这两个模块名字与其他模块冲突了,于是我们可以通过不同的包来组织模块,避免模块冲突。
则可为:

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

引入了包以后,只要顶层的包名不与别人冲突,那所有模块都不会与别人冲突。
每一个包目录下都会有一个_init_.py的文件,这个文件是必须存在的,否则python就把这个目录当成普通目录,而不是一个包。
_init_.py可以是空文件,也可以有python代码,因为_init_.py本身就是一个模块。

二、使用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()

说明:

注释 # -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! 
三、安装使用第三方模块

除了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

如下:

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

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

四、模块搜索路径

我们也可以导入自己写入的模块。当我们试图加载一个模块时,Python会在指定的路径下搜索对应的.py文件,如果找不到,就会报错,例如:

默认情况下,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...

文章版权归作者所有,未经允许请勿转载,若此文章存在违规行为,您可以联系管理员删除。

转载请注明本文地址:https://www.ucloud.cn/yun/42469.html

相关文章

  • python基础教程:Python模块(module)

    摘要:如果你这个脚本想要使用其它脚本里面的变量函数和类也是可以的,在你这个脚本里面用来导入要引用的脚本,而那个被引用的脚本就称作模块。 在此之前,我们运行一些简短的Python代码,都是通过Python解释器(python或ipython)进行的,如果我们退出解释器再重新运行解释器后,上次敲进去的变量、函数等都不见了,没有保存下来。为了保存我们曾经写过的代码,就是要写成.py文件,称为脚本。...

    whinc 评论0 收藏0
  • Python标准库系列之模块介绍

    摘要:的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。已经导入的模块会保存在字典中。 Python的模块其实就是封装了一个或者多个功能的代码集合,以便于重用,模块可以是一个文件也可以是一个目录,目录的形式称作包。 模块分类 内置模块 内置模块可以理解成当你安装好python环境之后,直接可以使用import导入的就是内置模块,...

    v1 评论0 收藏0
  • 充分理解 python -m mod

    摘要:最近在看的官方文档,提到一个的用法,很是不理解,所以查找了很多文档,并进行了如下总结。的用途定位并执行该模块。可读取包内任何文件内容。如果没有,则从查找,找到后载入内存,并加入到字典,名称也将导入到当前模块的命名空间。 最近在看 __main__ 的官方文档 —— https://docs.python.org/3/library/__main__.html#module-__main...

    Allen 评论0 收藏0
  • Python相对导入导致SystemError的解决方案(译)

    摘要:相对导入相对导入使用模块的决定它是否在一个包内。当你是用类似进行相对导入的时候,点表明在包的层次中上升多少。所以,你不能在交互式会话中直接使用任何相对导入。 源题目与答案地址如下http://stackoverflow.com/questions/14132...。下面是我的翻译(看作机翻也行),以及原文。 这个问题是如何解决在相对导入的时候,如果出现System Error的时候的解...

    ethernet 评论0 收藏0
  • Python 程序构架浅析

    摘要:一概念通常的程序的构架是指将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法。的程序构架可表示为一个程序就是一个模块的系统。它有一个顶层文件启动后可运行程序以及多个模块文件用来导入工具库。导入是中程序结构的重点所在。 一、概念 通常的Python程序的构架是指:将一个程序分割为源代码文件的集合以及将这些部分连接在一起的方法。 Python的程序构架可表示为: showImg...

    hss01248 评论0 收藏0

发表评论

0条评论

最新活动
阅读需要支付1元查看
<