一个Python Module(模块),是一个文件,包含了Python对象定义和Python语句(definitions and statements)。文件名就是模块名加上后缀.py,在模块内部,模块名存储在全局变量__name__中,是一个string,可以直接在module中通过__name__引用到module name。

module是为了重复使用一些对象,比如类,函数,而将这些对象定义放在一个.py文件中,或是将一个较大的工程裁缝为多个.py文件而易于维护,每一个.py文件都是一个module。

1,模块的定义和引入(import)

如下一个fibo.py文件

1 print ("__name__ :", __name__)2 deffib(n):3 a, b = 0, 1

4 result =[]5 print ("in fib():", __name__)6 while (b

这个fibo.py就是一个module,它有一个函数定义fib(),和一个语句(statement),第一行的print语句,我们在当前文件目录运行Python Interpreter就可以去引入这个模块,并执行模块中定义的fib()函数。

>>> importfibo

('__name__ :', 'fibo') #print语句执行>>> fibo.fib(10)

('in fib() :', 'fibo') #fib()函数执行

[1, 1, 2, 3, 5, 8]

可以看到,在import的时候,这个module的语句(statements)执行了,所定义的函数并未执行,在通过module名引用module中的函数定义时,函数才被执行

同样可以在一个script file中引入module,我们在fibo.py所在的目录创建另一个文件calculat.py

1 from fibo importfib2 for n in range(10, 50, 5):3 fib(n)

然后用Python解释器运行calcute.py得到结果。

这里有两种import 语句,

一种是import module_name1 [as name1], module_name2 [as name2]

一种是from module_name import item1 [as name1], item2 [as name2]

2, module的加载

每个module都包含对象定义和一些语句(statements),这些语句应该是意图要来初始化这个module的,这些语句会在这个module第一次被import的时候执行(多次import只会执行一次,不管是以上两种import的语句中那一种),当这个module被作为一个script来运行的时候也会被执行。

每个module都有自己的private symbol table,当使用第一种import语句import一个module的时候,引入者的local symbol table就加入了这个module,其名字如果没有使用as的话就是被引入的模块名本身。使用第二种import语句这会在引入者的local symbol table中加入具体引用的item,其名称若没使用as则就为item的名称。

3,module搜索路径

当遇到一个名为xiaoyu的module需要import的时候,Python Interpreter首先搜寻built-in module中有没有叫这个名的,若是没有,则Interpreter会从一系列的目录中去搜寻这个module(也就是这个.py文件),这些目录值存储在sys.path中,而sys.path又是用这些值来初始化的:

当前目录,即input script所在的目录

环境变量PYTHONPATH中存储的值(PYTHONPATH的语法和PATH一样)

Python包的安装目录,比如我的服务器上django就安装在 /usr/local/lib/python2.7/dist-packages/中,sys.path含有这个目录

Python有一个标准库,其中定义了一系列的module,这些module中的一部分是直接集成在Interpreter中的,这些built-in module主要提供了很重要的但是Python语言又没有提供的功能,比如跟system call有关的sys module就集成在所有平台的Python Interpreter中,在Interpreter中集成哪些module是可以配置的,并且随平台不同而有差别。

在启动Interpreter,sys.path被初始化后,我们可以对它进行修改

>>> import sys

>>> sys.path.append('/root/home/project/code/python')

4, 把module作为script来执行

前面我们已经提到了关于module中语句的执行。这里要补充一点东西,通常一个script file指的是调用Python Interpreter时作为参数传递给Interpreter的文件,当然所有的.py文件都是一个module,这样的一个script或是module,其__name__会被Interpreter自动设置为"__main__"。以下是一个测试:

1 print ("__name__ :", __name__)2 deffib(n):3 a, b = 0, 1

4 result =[]5 print ("in fib() :", __name__)6 while (b

11 if __name__ == "__main__":12 importsys13 fib(int(sys.argv[1]))

用Python Interpreter直接调用这个script

oot@AY1212240253255e84714:/home/project/code/python# python fibo.py 22

('__name__ :', '__main__')

('in fib() :', '__main__')

[1, 1, 2, 3, 5, 8, 13, 21]

可以看到依然module的语句都会被执行,只是__name__的值一开始就变为了"__main__",给一个模块加上

if __name == "__main__":

常常是为了测试这个模块,因为这个语句块只有当module被作为script直接传给Interpreter的时候才会被执行。

上面例子中的12行import sys可以看出,Python并没有规定import语句必须写在module的最前面,只是习惯性的我们约定都写在最前面。

5. 内置dir()函数(built-in dir() function)

dir()函数可以用来查看一个module所定义的所有names,试验

>>> dir()

['__builtins__', '__doc__', '__name__', '__package__']

>>> import sys, fibo as fibo_local

('__name__ :', 'fibo')

>>> dir()

['__builtins__', '__doc__', '__name__', '__package__', 'fibo_local', 'sys']

>>> dir(fibo)

Traceback (most recent call last):

File "", line 1, in

NameError: name 'fibo' is not defined

>>> dir(fibo_local)

['__builtins__', '__doc__', '__file__', '__name__', '__package__', 'fib']

可以看到在import了fibo和sys后,并且fibo是用别名fibo_local来引入的,在引入者module中就定义了sys和fibo_local,可以看到dir(fibo)是抛了NameError异常的,fibo并没有被定义,定义的是fibo_local,这也可以看出import语句对local symbol table是怎样影响的。

6, 模块包(package)

包(package)可以理解为是组织起来的module的一个层次结构,也就是package是一个directory,它包含sub-package或者是module,而module是.py文件,要让Python Interpreter把一个目录作为package,则该目录下必须有__init__.py文件,__init__.py可以为空,当然也可以有对象定义和语句,用来做初始化工作,__init__.py还有个作用就是设置__all__变量。

package本身就可以来作为一个module使用,只是它所包含的sub-module或module可以通过package name用package.module的名称形式去引用,这更有利于组织一系列相关的module,避免module间定义的名称的混乱。

package在实际工程中非常常用,__init__.py也常常不会为空,而会有对象定义和初始化代码来让这个包,也就是这个module,包含其该有的item定义。以后我们会对package做更多了解。

参考:

python38moduledocs是什么_Python模块(Module)相关推荐

  1. python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...

    1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...

  2. python 模块(Module)和包

    阿里云大学人工智能学前小测验-Python测验 19.以下关于模块说法正确的是 A. 一个.py就是一个模块 B. 任何一个普通的xx.py文件可以作为模块导入 C. 模块文件的扩展名一定是 .py ...

  3. python模块大全使用说明_python模块详解

    使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识.本文分为如下几个部分 概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...

  4. python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)

    如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...

  5. Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一

    搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置.那么nginx 以模块 module为骨架的设计下是如何运用模 ...

  6. python自建模块导入_Python模块的使用及自建模块的导入方法举例

    模块使用 模块: 模块式pyth1.on组织代码的基本方式 一个python脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) 所有的点p为文件都可以作 ...

  7. SAP UI5 初学者教程之六 - 了解 SAP UI5 的模块(Module)概念试读版

    Jerry 从 2014 年加入 SAP成都研究院 CRM Fiori 开发团队之后开始接触 SAP UI5,曾经在 SAP 社区和"汪子熙"微信公众号上发表过多篇关于 SAP U ...

  8. Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...

    Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...

  9. 在idea 中添加和删除模块Module

    在idea 中添加和删除模块Module ThinkPet 2018-12-22 10:12:50  4125  收藏 1 分类专栏: idea 版权 1.添加模块 2.删除模块 ---------- ...

最新文章

  1. python时间处理模块datetime+dateutil、numpy时间处理模块datetime64以及pandas时间处理模块Timestamp的演化路径及常用处理接口
  2. Android-FixBug热修复框架的使用及源码分析(不发版修复bug)
  3. 【Java报错】多数据源mapper异常more than one `primary` bean found among candidates: [sqlSessionFactory] 问题分析解决
  4. SharePoint 2010 RBS 安装和配置遇到的一个问题
  5. C C++ 文件输入与输出
  6. 双目估计方法_双目深度估计中的自监督学习概览
  7. (转)《精通比特币》原码分析: rpc_block
  8. 电脑如何录制正在播放的视频 这个方法太简单了
  9. 【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )
  10. java 分贝_java – wav文件中特定点的分贝值
  11. Linux安装JDK步骤
  12. 大一计算机科学化学,核心导读: 王 龙(北京大学计算机科学技术系学生,江西省高考理科状元): 化学被称为理科中的文科。题目量较多,单题分较...
  13. ESP-MESH 无线组网,让智能家居通信组网更方便 | ESP32轻松学(Arduino版)
  14. CF1287B CF567C
  15. Matlab 计算均方误差MSE的三种方法
  16. 日本儒学的特色与日本文化
  17. 基于PHP的学生食堂管理系统
  18. AutoCAD2012从入门到精通中文视频教程 第25课 缩放 倒角 圆角(个人收藏)
  19. google host
  20. 7-1 温度转换 (100 分)

热门文章

  1. Invalid options in vue.config.js: “baseUrl“ is not allowed
  2. java fly bird小游戏_java swing实现的小游戏flybird源码附带视频配置修改教程
  3. python 服务器框架_python 服务器框架
  4. Vue 组件 mixins
  5. nginx总结(面试必看)
  6. 超详细:Springboot连接centos7下redis6的必要配置和失败分析
  7. xss绕过字符过滤_XSS绕过实战练习
  8. ulimit常用参数介绍
  9. 自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析
  10. linux中高端内存和低端内存的概念【转】