文章目录

  • 模块的调用
  • 以脚本的方式执行模块
  • 模块搜索路径
  • ”编译过的“Python文件
  • dir()函数

模块的调用

模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在一个模块内部,模块名(作为一个字符串)可以通过全局变量 __name__ 的值获得。例如,使用你最喜爱的文本编辑器在当前目录下创建一个名为 fibo.py 的文件, 文件中含有以下内容:

# Fibonacci numbers moduledef fib(n):    # write Fibonacci series up to na, b = 0, 1while a < n:print(a, end=' ')a, b = b, a+bprint()def fib2(n):   # return Fibonacci series up to nresult = []a, b = 0, 1while a < n:result.append(a)a, b = b, a+breturn result

只需要在新的文件写入以下代码就可以调用已经写好的模块

#导入模块
import fibo
#调用模块
fibo.fib(56)
fibo.fib2(100)

还可以这样导入

from fibo import fib,fib2
fib(500)

甚至还可以导入模块内定义的所有名称,但是这会调入所有非以下划线(_)开头的名称, 在多数情况下,Python程序员都不会使用这个功能,因为它在解释器中引入了一组未知的名称,而它们很可能会覆盖一些你已经定义过的东西。

from fibo import *

如果模块名称之后带有as,则跟在阿萨之后的名称将直接绑定到所导入的模块

import fibo as fib
fib.fib(500)

以脚本的方式执行模块

python fibo.py <arguments>

模块里的代码会被执行,就好像你导入了模块一样,但是 name 被赋值为 “main”。 这意味着通过在你的模块末尾添加这些代码:

if __name__=="__main__"import sysfib(int (sys.argv[1]))

你既可以把这个文件当作脚本又可当作一个可调入的模块来使用,因为这段解析命令行的代码只有当模块是以“main"文件的方式执行的时候才会运行。

模块搜索路径

当一个名为 spam 的模块被导入的时候,解释器首先寻找具有该名称的内置模块。如果没有找到,然后解释器从 sys.path 变量给出的目录列表里寻找名为 spam.py 的文件。sys.path 初始有这些目录地址:

包含输入脚本的目录(或者未指定文件时的当前目录)。

PYTHONPATH (一个包含目录名称的列表,它和shell变量 PATH 有一样的语法)。

取决于安装的默认设置

”编译过的“Python文件

为了加速模块载入,Python在 pycache 目录里缓存了每个模块的编译后版本,名称为 module.version.pyc ,其中名称中的版本字段对编译文件的格式进行编码; 它一般使用Python版本号。例如,在CPython版本3.3中,spam.py的编译版本将被缓存为 pycache/spam.cpython-33.pyc。此命名约定允许来自不同发行版和不同版本的Python的已编译模块共存。

Python根据编译版本检查源的修改日期,以查看它是否已过期并需要重新编译。这是一个完全自动化的过程。此外,编译的模块与平台无关,因此可以在具有不同体系结构的系统之间共享相同的库。

Python在两种情况下不会检查缓存。首先,对于从命令行直接载入的模块,它从来都是重新编译并且不存储编译结果;其次,如果没有源模块,它不会检查缓存。为了支持无源文件(仅编译)发行版本, 编译模块必须是在源目录下,并且绝对不能有源模块。

dir()函数

内置函数 dir() 用于查找模块定义的名称。 它返回一个排序过的字符串列表:

>>> import fibo, sys
>>> dir(fibo)
['__name__', 'fib', 'fib2']
>>> dir(sys)
['__breakpointhook__', '__displayhook__', '__doc__', '__excepthook__','__interactivehook__', '__loader__', '__name__', '__package__', '__spec__','__stderr__', '__stdin__', '__stdout__', '__unraisablehook__','_clear_type_cache', '_current_frames', '_debugmallocstats', '_framework','_getframe', '_git', '_home', '_xoptions', 'abiflags', 'addaudithook','api_version', 'argv', 'audit', 'base_exec_prefix', 'base_prefix','breakpointhook', 'builtin_module_names', 'byteorder', 'call_tracing','callstats', 'copyright', 'displayhook', 'dont_write_bytecode', 'exc_info','excepthook', 'exec_prefix', 'executable', 'exit', 'flags', 'float_info','float_repr_style', 'get_asyncgen_hooks', 'get_coroutine_origin_tracking_depth','getallocatedblocks', 'getdefaultencoding', 'getdlopenflags','getfilesystemencodeerrors', 'getfilesystemencoding', 'getprofile','getrecursionlimit', 'getrefcount', 'getsizeof', 'getswitchinterval','gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info','intern', 'is_finalizing', 'last_traceback', 'last_type', 'last_value','maxsize', 'maxunicode', 'meta_path', 'modules', 'path', 'path_hooks','path_importer_cache', 'platform', 'prefix', 'ps1', 'ps2', 'pycache_prefix','set_asyncgen_hooks', 'set_coroutine_origin_tracking_depth', 'setdlopenflags','setprofile', 'setrecursionlimit', 'setswitchinterval', 'settrace', 'stderr','stdin', 'stdout', 'thread_info', 'unraisablehook', 'version', 'version_info','warnoptions']

它列出所有类型的名称:变量,模块,函数等,但dir()不会列出内置函数和变量的名称。如果想要这些,他们的定义是在标准模块builtins中

import builtins
dir(builtins)

输出:

['ArithmeticError', 'AssertionError', 'AttributeError', 'BaseException','BlockingIOError', 'BrokenPipeError', 'BufferError', 'BytesWarning','ChildProcessError', 'ConnectionAbortedError', 'ConnectionError','ConnectionRefusedError', 'ConnectionResetError', 'DeprecationWarning','EOFError', 'Ellipsis', 'EnvironmentError', 'Exception', 'False','FileExistsError', 'FileNotFoundError', 'FloatingPointError','FutureWarning', 'GeneratorExit', 'IOError', 'ImportError','ImportWarning', 'IndentationError', 'IndexError', 'InterruptedError','IsADirectoryError', 'KeyError', 'KeyboardInterrupt', 'LookupError','MemoryError', 'NameError', 'None', 'NotADirectoryError', 'NotImplemented','NotImplementedError', 'OSError', 'OverflowError','PendingDeprecationWarning', 'PermissionError', 'ProcessLookupError','ReferenceError', 'ResourceWarning', 'RuntimeError', 'RuntimeWarning','StopIteration', 'SyntaxError', 'SyntaxWarning', 'SystemError','SystemExit', 'TabError', 'TimeoutError', 'True', 'TypeError','UnboundLocalError', 'UnicodeDecodeError', 'UnicodeEncodeError','UnicodeError', 'UnicodeTranslateError', 'UnicodeWarning', 'UserWarning','ValueError', 'Warning', 'ZeroDivisionError', '_', '__build_class__','__debug__', '__doc__', '__import__', '__name__', '__package__', 'abs','all', 'any', 'ascii', 'bin', 'bool', 'bytearray', 'bytes', 'callable','chr', 'classmethod', 'compile', 'complex', 'copyright', 'credits','delattr', 'dict', 'dir', 'divmod', 'enumerate', 'eval', 'exec', 'exit','filter', 'float', 'format', 'frozenset', 'getattr', 'globals', 'hasattr','hash', 'help', 'hex', 'id', 'input', 'int', 'isinstance', 'issubclass','iter', 'len', 'license', 'list', 'locals', 'map', 'max', 'memoryview','min', 'next', 'object', 'oct', 'open', 'ord', 'pow', 'print', 'property','quit', 'range', 'repr', 'reversed', 'round', 'set', 'setattr', 'slice','sorted', 'staticmethod', 'str', 'sum', 'super', 'tuple', 'type', 'vars','zip']

包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。
假设你想为声音文件和声音数据的统一处理,设计一个模块集合(一个“包”)。由于存在很多不同的声音文件格式(通常由它们的扩展名来识别,例如:.wav, .aiff, .au),因此为了不同文件格式间的转换,你可能需要创建和维护一个不断增长的模块集合。 你可能还想对声音数据还做很多不同的处理(例如,混声,添加回声,使用均衡器功能,创造人工立体声效果), 因此为了实现这些处理,你将另外写一个无穷尽的模块流。这是你的包的可能结构(以分层文件系统的形式表示):

sound/                          Top-level package__init__.py               Initialize the sound packageformats/                  Subpackage for file format conversions__init__.pywavread.pywavwrite.pyaiffread.pyaiffwrite.pyauread.pyauwrite.py...effects/                  Subpackage for sound effects__init__.pyecho.pysurround.pyreverse.py...filters/                  Subpackage for filters__init__.pyequalizer.pyvocoder.pykaraoke.py...

当导入这个包时,Python搜索 sys.path 里的目录,查找包的子目录。

必须要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包。 这样可以防止具有通常名称例如 string 的目录在无意中隐藏稍后在模块搜索路径上出现的有效模块。 在最简单的情况下,__init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 __all__ 变量,具体将在后文介绍。

包的用户可以从包中导入单个模块,例如:

import sound.effects.echo

这会加载子模块sound.effects.echo。但引用它时必须使用他的全名。

sound.effects.echo.echofilter(input,output,delay=0.7,atten=4)

导入子模块的另一种方法是

from sound.effects.echo import echofilter

同样,这也会加载子模块 echo,但这会使其函数 echofilter() 直接可用:

echofilter(input, output, delay=0.7, atten=4)

Python---modules(模块)相关推荐

  1. 详解Python模块化——模块(Modules)和包(Packages)

    文章目录 引言 Python Modules模块 导入模块 ①导入整个模块 ②导入模块中的特定函数 ③导入模块中的所有函数 给导入的模块一个别名 单独运行模块 加速模块加载 Python Packag ...

  2. 「学习笔记——Python」Python 的模块(Modules)

    6 Python的模块 (Modules) Table of Contents 1 关于模块 1.1 更多关于模块的故事 1.2 将模块作为脚体执行 1.3 模块搜索路径 1.4 "编译过的 ...

  3. python 多层包多模块_python Modules模块操作

    今天学习python的Modules模块操作,并记录学习过程欢迎大家一起交流分享. 首先新建一个python文件命名为my_module.py的自定义moudle文件,在这个文件中进行模块代码编写: ...

  4. Python: 第三方模块(modules)的安装位置 (2014-08-24 23:19:18)转载▼ 标签: site-packages dist-packages 默认安装目录 分类: Pyth

    Python: 第三方模块(modules)的安装位置 在默认情况下,Python的module的默认安装目录是 /usr/local/lib/pythonX.Y/site-packages.例如,我 ...

  5. python高级-模块(14)

    一.python中的模块 有过C语言编程经验的朋友都知道在C语言中如果要引用sqrt函数,必须用语句#include <math.h>引入math.h这个头文件,否则是无法正常进行调用的. ...

  6. 聊聊Python ctypes 模块(转载)

    聊聊Python ctypes 模块(转载) https://zhuanlan.zhihu.com/p/20152309?columnSlug=python-dev 作者:Jerry Jho 链接:h ...

  7. python 如何查看模块所有方法-如何查看python的模块

    python的一个优势是有着大量自带和在线的模块(module)资源,可以提供丰富的功能,在使用这些模块的时候,如果每次都去网站找在线文档会过于耗费时间,结果也不一定准确.因此这里介绍下python自 ...

  8. Day05 - Python 常用模块

    1. 模块简介 模块就是一个保存了 Python 代码的文件.模块能定义函数,类和变量.模块里也能包含可执行的代码. 模块也是 Python 对象,具有随机的名字属性用来绑定或引用. 下例是个简单的模 ...

  9. Python入门--模块的导入和使用

    Python的模块 关于python库 python的模块(module)分为官方库,和非官方库两个部分 python的精巧的因素之一,也是得益于他的强大的库的支持,与C不同,Pyhton有大量的库支 ...

  10. 查看python内部模块命令,内置函数,查看python已经安装的模块命令

    查看python内部模块命令,内置函数,查看python已经安装的模块命令 可以用dir(modules) 或者用 pip list 或者用 help('modules') 或者用 python -m ...

最新文章

  1. 写了个牛逼的日志切面,甩锅更方便了!
  2. python网课阿里云_关于python视频教程的阿里云网站内容
  3. python cv2模块安装_Python运行脚本前,自动安装需要的模块包
  4. 社交软件这样赚钱:line表情包卖了2亿多美元
  5. oracle误删scott文件如何恢复
  6. Web安全之文件包含漏洞
  7. linux下卸载已安装的软件
  8. Codeforces Round #715 (Div. 1) B. Almost Sorted 找规律
  9. python使用t-sne算法降维,方便可视化
  10. call、apply、bind的区别,模拟call、apply和bind的实现
  11. Linux系统编程 -- volatile关键字
  12. 组态王历史记录用access_Access数据库与表在 组态王中使用.ppt
  13. 线性代数 : 矩阵乘法和矩阵的逆
  14. ajax实现文件上传6,实现Ajax文件上传功能
  15. 推荐一个PPT挣钱路子,日赚800-1000元
  16. C语言中的运算符(超全超详细)
  17. 解决Cannot delete or update a parent row: a foreign key constraint fails的mysql报错
  18. Linux C程序访问NULL指针
  19. Linux下C/C++实现(网络流量分析-NTA)
  20. 配置zabbix管理账号

热门文章

  1. MFC VS2012对话框背景填图
  2. Swift之字符串String的常规操作和处理
  3. RxSwift之深入解析如何创建Observable序列
  4. 进阶指南:如何编写可重用程序
  5. 信息学奥赛一本通(C++)在线评测系统——基础(一)C++语言—— 1059:求平均年龄
  6. C语言中的枚举和联合体
  7. 函数、指针、数组的组合 及结构体和共用体
  8. 【机器视觉】 endtry算子
  9. 【ARM】Load Store指令
  10. 【C语言】C语言实现面向对象编程之多态