美文网首页
模块和包

模块和包

作者: 夜醉梦紅尘 | 来源:发表于2019-10-04 15:39 被阅读0次

模块化编程

Python 有时候称为胶水语言,就是因为它有强大的可扩展性,这个扩展性就是用模块实现的。

模块其实就是一个以 .py 结尾的 Python 文件,这个文件中可以包含变量、函数、类等。

这个模块可以包含实现了一个或者多个功能的代码。

模块可以在其他 Python 文件中使用,可以通过网络进行传播。

这样的话,如果想在你的程序中实现某些功能,其实网络的其他程序猿已经给你写好了,下载下来,安装到自己的环境下,就可以使用了。

模块化编程是指将大型,笨拙的编程任务分解为单独的,更小的,更易于管理的子任务或模块的过程。然后可以像构建块一样拼凑单个模块以创建更大的应用程序。
在大型应用程序中模块化代码有几个优点:

简单性:模块通常只关注问题的一小部分,而不是关注当前的整个问题。如果您正在处理单个模块,那么您的头脑中要思考的将有一个较小的问题范围。这使得开发更容易,更不容易出错。

可维护性:模块通常设计为能够在不同的问题域之间实施逻辑边界。如果以最小化相互依赖性的方式编写模块,则对单个模块的修改将对程序的其他部分产生影响的可能性降低。(您甚至可以在不了解该模块之外的应用程序的情况下对模块进行更改。)这使得许多程序员团队在大型应用程序上协同工作更加可行。

可重用性:单个模块中定义的功能可以通过应用程序的其他部分轻松地重用。这消除了重新创建重复代码的需要。

范围:模块通常定义一个单独的命名空间,这有助于避免程序的不同区域中的变量名之间的冲突。

函数,模块和包都是Python中用于促进代码模块化的构造。

一、模块分类

实现方式分类
实际上有两种不同的方法可以在Python中定义模块:

模块可以用Python本身编写。
模块可以用C编写并在运行时动态加载,就像re(正则表达式)模块一样。
以上两种情况下,模块的内容都以相同的方式访问:使用import语句

模块的归属分类

包含在解释中的一个内置的模块本,像itertools模块。
其他机构或个人开发者编写的模块,成为第三方模块
自己写的 .py 文件,就是自定义的模块

第三方模块

从网络上下载的模块称为 第三方模块

安装方法

1.pip3 工具安装
例如下面的示例是安装用于执行远程主机命令的模块 paramiko
注意: pip3 是 bash 环境下的命令

$ pip3 install paramiko

python2.x 使用 pip
python3.x 使用 pip3
当然这也不是固定的,比如你给 pip3 定义了一个别名 pip

2.源码安装
源码安装就是,从网络上下载没有封装的 python 文件的源码,之后在本地执行其源码中的 setup.py 文件进行安装。

模块的源码一般都有一个主目录,主目录中包含了一个到多个子目录和文件。
但是主目录下一定有一个 setup.py 的文件,这个是源码安装的入口文件,就是需要执行这个文件并且传入一个 install 参数进行源码安装。

示例:

a. 下载源码包

wget https://files.pythonhosted.org/packages/4a/1b/9b40393630954b54a4182ca65a9cf80b41803108fcae435ffd6af57af5ae/redis-3.0.1.tar.gz

b. 解压源码包

tar -xf redis-3.0.1.tar.gz

3 进入模块源码的主目录,并安装源码包


image image

上面表示安装成功

自定义模块

有的情况下,是需要自己编写一些模块的,这种就是自定义模块了。

示例:

some_mod.py


x = 10

li = ['shark', 18]

def foo():
    return 30

class Person():
    def __init__(self, name, age):
        self.name = name
        self.age = age

内置模块
模块除了 第三方模块, 自定义模块,还有 内置模块。

模块的使用
使用模块需要先导入模块名。

模块名就是把 .py 去掉后的文件名。比如 some_mod.py 的模块名就是 some_mod

a. 导入模块

import  some_mod

b. 使用模块中的对象

要想使用模块中的变量名或者函数名等,只需要使用 模块名.变量名 的方式即可。

例如,下面是使用的了 some_mod 模块中的 foo 函数。

import  some_mod

some_mod.foo()

更多模块导入的方式
a. 从模块中导入其中的一个对象

from some_mod  import  x

b. 从模块中导入多个对象

from some_mod import x, foo

c. 从模块中导入全部的对象, 不建议这么做

from some_mod import *

二、包

包就是包含了一个 init.py 文件的文件夹,这个文件夹下可以有更多的目录或文件。就是说,包里可以用子包或单个 .py 的文件。

其实包也是模块,就是说包和单一的 .py 文件统称为模块。

文件 init.py

init.py 文件,在 Python3.x 中可以没有,但是在 Python2.x 中必须有。

文件中可以有代码,也可以是个空文件,但是文件名不能是其他的。

到导入包的时候,此文件假如存在,会以此文件去见包的名称空间。

也就是说,导入如包的时候,只要在 init.py 文件中的名称才可以生效。否则,即使是一个模块在包目录下面也不会被导入到内存中,也就不会生效。

使用包也需要导入

a. 单独导入包

import package  # 注意这样不会导入其下面的模块和子包

b. 从包中导入下面的模块

from package import t

c. 从包中导入下面的子包,注意这不会导入子包下面的任何模块

from package import subpkg

d. 从包的子包中导入子包的模块

from package.subpkg import som_mod

e. 从包或子包的模块中导入具体的对象

from package.t  import foo

from package.subpkg.som_mod import x

from package.t  import x  as y   # 把 x 导入后起个别名 y

记住一点:不论是导入包还是模块,从左向右的顺序来说,最后一个点儿的左边一定是一个包名,而不能是一个模块名

三模块的内置变量 name

每个 .py 文件都有一个变量名 name, 这个变量名的值会根据这个文件的用途不同而随之变化。

当文件作为模块被其他文件使用时,name 的值是这个文件的模块名

当文件作为脚本(就是作为可执行文件)使用时,name 的值是字符串类型的 'main'

通常你会看到一些 Python 脚本中会有类似下面的代码:

some_script.py

def foo():
    pass

def func():
    pass

def main():
    foo()
    func()

if __name__ == '__main__':
       main()

这样执行这个脚本的话,其内置的 name 变量的值就是字符串的 'main'。
这样的话, if 的判断添加就会达成,从而其语句下面的代码就会执行, main() 函数就会被调用 。

模块名的搜索路径(扩展)

将获取服务器的信息模块化

import sys,os
Base_dir = os.path.dirname(os.path.dirname(os.path.abspath(__file__)))
sys.path.insert(0,Base_dir)
from cmdb import cpu_info,base_info,mem_info
while True:
    inp = input("请输入查询信息,1:base 2:cpu 3:mem q:退出>>")
    if inp == "1":
        base = base_info.Base()
        print(base.cmd_handle())
    elif inp =="2":
        cpu = cpu_info.Cpu()
        print(cpu.cmd_handle())
    elif inp =="3":
        mem = mem_info.Memory(debug=True)
        print(mem.cmd_handle())
    else:
        break

前面找路径的方法一定要记住

相关文章

  • 2018-08-13

    模块和包的定义 import 和 from import包和模块的引入import引入一个模块import 模块名...

  • 笔记:Python的包和模块的区别

    Python中的模块和包的英文表示: 模块的英文:Module 包的英文:Packages 对模块和包的类比理解:...

  • Python学习笔记7

    异常处理包和模块 包和模块的一般操作 导入操作的本质 模块检索的路径 导入模块的场景 第三方包和模块的安装 异常处...

  • 模块和包

    模块 1.一个python文件就是一个模块 当导入一个模块,就相当于执行了这个模块,创建该模块的命名空间,将模块中...

  • 包和模块

    1、包和模块 什么是包(lib)? 什么是模块(module)? 常见模块或者包的导入方式 1、如果是普通文件夹,...

  • 包和模块

    一、python中包和模块的区别: 1.包:包含 文件的文件夹,导入模块的可通过 变量。2.模块:编写python...

  • 模块和包

    封装包很简单。在文件系统上组织代码,并确保每个目录都定义了init.py文件 (http://upload-ima...

  • 包和模块

    1、python模块(module) 在计算机实际的开发过程中,随着代码量的不断增加,如果放在一个文件中会变得越来...

  • 模块和包

    包和模块: 包(lib):通常包总是一个目录,可以使用import导入包,或者from + import来导入包中...

  • 包和模块

    了解一个生态系统的关键是学习它的词汇。Node.js和npm有一个非常特别的包和模块的定义,很容易弄混淆。我们会在...

网友评论

      本文标题:模块和包

      本文链接:https://www.haomeiwen.com/subject/sjfkyctx.html