python38moduledocs是什么_Python模块(Module)
一个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)相关推荐
- python中大括号是什么_Python中模块(Module)和包(Package)到底是什么,有什么区别?...
1. 模块(Module) 在计算机程序的开发过程中,随着程序代码越写越多,在一个文件里代码就会越来越长,越来越不容易维护. 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个 ...
- python 模块(Module)和包
阿里云大学人工智能学前小测验-Python测验 19.以下关于模块说法正确的是 A. 一个.py就是一个模块 B. 任何一个普通的xx.py文件可以作为模块导入 C. 模块文件的扩展名一定是 .py ...
- python模块大全使用说明_python模块详解
使用python时,常常会涉及到库的调用,这就需要掌握模块的基本知识.本文分为如下几个部分 概念说明 模块的简单调用 包的导入 特殊的__init__.py文件 导入模块的搜索路径 __all__ 绝 ...
- python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)
如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...
- Nginx 源码分析-- 模块module 解析执行 nginx.conf 配置文件流程分析 一
搭建nginx服务器时,主要的配置文件 nginx.conf 是部署和维护服务器人员经常要使用到的文件, 里面进行了许多服务器参数的设置.那么nginx 以模块 module为骨架的设计下是如何运用模 ...
- python自建模块导入_Python模块的使用及自建模块的导入方法举例
模块使用 模块: 模块式pyth1.on组织代码的基本方式 一个python脚本可以单独运行,也可以导入另一个脚本中运行,当脚本被导入运行时,我们将其称为模块(module) 所有的点p为文件都可以作 ...
- SAP UI5 初学者教程之六 - 了解 SAP UI5 的模块(Module)概念试读版
Jerry 从 2014 年加入 SAP成都研究院 CRM Fiori 开发团队之后开始接触 SAP UI5,曾经在 SAP 社区和"汪子熙"微信公众号上发表过多篇关于 SAP U ...
- Python中第三方的库(library)、模块(module),包(package)的安装方法以及ImportError: No module named...
Python中,想要安装第三方安装包,即third library,package等,对于熟悉的人来说,很简单. 但是对于新手,至少对于之前的我,很难,往往只是安装一个很小的包,都被搞得一头雾水. 现 ...
- 在idea 中添加和删除模块Module
在idea 中添加和删除模块Module ThinkPet 2018-12-22 10:12:50 4125 收藏 1 分类专栏: idea 版权 1.添加模块 2.删除模块 ---------- ...
最新文章
- python时间处理模块datetime+dateutil、numpy时间处理模块datetime64以及pandas时间处理模块Timestamp的演化路径及常用处理接口
- Android-FixBug热修复框架的使用及源码分析(不发版修复bug)
- 【Java报错】多数据源mapper异常more than one `primary` bean found among candidates: [sqlSessionFactory] 问题分析解决
- SharePoint 2010 RBS 安装和配置遇到的一个问题
- C C++ 文件输入与输出
- 双目估计方法_双目深度估计中的自监督学习概览
- (转)《精通比特币》原码分析: rpc_block
- 电脑如何录制正在播放的视频 这个方法太简单了
- 【字节码插桩】Android 签名机制 ( 生成 Android 签名文件 | 分析签名文件 | 签名文件两个密码的作用 | 三种签名方式 )
- java 分贝_java – wav文件中特定点的分贝值
- Linux安装JDK步骤
- 大一计算机科学化学,核心导读: 王 龙(北京大学计算机科学技术系学生,江西省高考理科状元): 化学被称为理科中的文科。题目量较多,单题分较...
- ESP-MESH 无线组网,让智能家居通信组网更方便 | ESP32轻松学(Arduino版)
- CF1287B CF567C
- Matlab 计算均方误差MSE的三种方法
- 日本儒学的特色与日本文化
- 基于PHP的学生食堂管理系统
- AutoCAD2012从入门到精通中文视频教程 第25课 缩放 倒角 圆角(个人收藏)
- google host
- 7-1 温度转换 (100 分)
热门文章
- Invalid options in vue.config.js: “baseUrl“ is not allowed
- java fly bird小游戏_java swing实现的小游戏flybird源码附带视频配置修改教程
- python 服务器框架_python 服务器框架
- Vue 组件 mixins
- nginx总结(面试必看)
- 超详细:Springboot连接centos7下redis6的必要配置和失败分析
- xss绕过字符过滤_XSS绕过实战练习
- ulimit常用参数介绍
- 自己动手构造编译系统:编译、汇编与链接2.1.4 语义分析
- linux中高端内存和低端内存的概念【转】