4 模块

Python有一种方法可以把定义放在一个文件里,并在脚本或解释器的交互式实例中使用它们。这样的文件被称作 模块 ;模块中的定义可以 导入 到其它模块或者 模块

模块是一个包含Python定义和语句的文件。文件名就是模块名后跟文件后缀 .py 。在一个模块内部,模块名(作为一个字符串)可以通过全局变量 __name__的值获得

4.1 import

创建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

现在进入Python解释器,并用 import 命令导入该模块:

在当前的符号表中,这并不会直接进入到定义在 fibo 函数内的名称;它只是进入到模块名 fibo 中。可以用模块名访问这些函数:

import fibo
>>> fibo.fib(1000)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377 610 987
>>> fibo.fib2(100)
[0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89]
>>> fibo.__name__
'fibo'
  • import 语句有一个变体,它可以把名字从一个被调模块内直接导入到现模块的符号表里
>>> from fibo import fib, fib2
>>> fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
  • 如果模块名称之后带有 as,则跟在 as 之后的名称将直接绑定到所导入的模块。
>>> import fibo as fib
>>> fib.fib(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377>>> from fibo import fib as fibonacci
>>> fibonacci(500)
0 1 1 2 3 5 8 13 21 34 55 89 144 233 377
  • 出于效率的考虑,每个模块在每个解释器会话中只被导入一次。因此,如果你更改了你的模块,则必须重新启动解释器, 或者,如果它只是一个要交互式地测试的模块,请使用 importlib.reload() 例如 import importlib; importlib.reload(modulename)

4.2 模块搜索路径

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

4.3 dir() 函数

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

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

4.4 包-模块集合

包是一种通过用“带点号的模块名”来构造 Python 模块命名空间的方法。 例如,模块名 A.B 表示 A 包中名为 B 的子模块。

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...

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

import sound.effects.echo

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

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

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

from sound.effects import echo

这也会加载子模块 echo ,并使其在没有包前缀的情况下可用,因此可以按如下方式使用:

echo.echofilter(input, output, delay=0.7, atten=4)
  • 必须要有 __init__.py 文件才能让 Python 将包含该文件的目录当作包。 这样可以防止具有通常名称例如 string 的目录在无意中隐藏稍后在模块搜索路径上出现的有效模块。 在最简单的情况下,__init__.py 可以只是一个空文件,但它也可以执行包的初始化代码或设置 __all__ 变量
  • 请注意,当使用 from package import item 时,item可以是包的子模块(或子包),也可以是包中定义的其他名称,如函数,类或变量。 import 语句首先测试是否在包中定义了item;如果没有,它假定它是一个模块并尝试加载它。如果找不到它,则引发 ImportError 异常。
  • 相反,当使用 import item.subitem.subsubitem 这样的语法时,除了最后一项之外的每一项都必须是一个包;最后一项可以是模块或包,但不能是前一项中定义的类或函数或变量。
  • 使用 from package import specific_submodule 没有任何问题! 实际上,除非导入的模块需要使用来自不同包的同名子模块,否则这是推荐的表示法。

Python3.7.4入门-4模块相关推荐

  1. python3爬虫入门教程-总算懂得python3.4爬虫入门教程

    Python是一款功能强大的脚本语言,具有丰富和强大的库,重要的是,它还具有很强的可读性,易用易学,非常适合编程初学者入门.以下是小编为你整理的python3.4爬虫入门教程 环境配置:下载Pytho ...

  2. python3入门与进阶笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

  3. python3萌新入门笔记_我的Python3萌新入门笔记

    Python3萌新入门笔记是一系列真实的自学笔记. 当然,它也是比较全面的入门教程,共包括54篇笔记. 从第一篇笔记开始,大半年的时间我都是在自学和组织教程内容. 我觉得有必要,把我自己的学习过程和大 ...

  4. python入门指南-python3.6.0入门指南(官方版).pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python3.6.0入门指南(官方版).pdf7 ...

  5. python入门指南小说免费阅读-python3.6.0入门指南(官方版).pdf

    您所在位置:网站首页 > 海量文档 &nbsp>&nbsp计算机&nbsp>&nbspPython python3.6.0入门指南(官方版).pdf7 ...

  6. python3爬虫入门教程-Python3爬虫学习入门教程

    本文实例讲述了Python3爬虫相关入门知识.分享给大家供大家参考,具体如下: 在网上看到大多数爬虫教程都是Python2的,但Python3才是未来的趋势,许多初学者看了Python2的教程学Pyt ...

  7. python3怎么安装gmpy2_python2/3 模块gmpy2在linux下安装

    !!!首先建议在Windows下安装 因为很方便!!! gmpy2是解密RSA时所用脚本的一个模块python下输入 import gmpy2  ,提示 Traceback (most recent ...

  8. Python3——多线程之threading模块

    Python3--多线程之threading模块 目录 Python3--多线程之threading模块 Threading模块的对象 Threading模块的Thread类 queue模块(线程间通 ...

  9. python3数据科学入门与实战_Python3学习之Python3数据科学入门与实战视频教程

    Python3学习之Python3数据科学入门与实战视频教程 Python3数据科学入门与实战 这是一个数据驱动的时代,想要从事机器学习.人工智能.数据挖掘等前沿技术,都离不开数据跟踪,本课程通过Nu ...

最新文章

  1. java电信计费项目论文_基于JAVA开发的电信IP计费系统设计毕业论文
  2. 计算机系统基础:计算机性能评价知识笔记
  3. sys.stdin.read和raw_input函数
  4. uniapp 统计_“uni统计”震撼来袭 - 1份报表,掌握全景数据(App及各种小程序)
  5. SQLite数据库---ListView控件之商品展示案例
  6. 深度学习模型压缩方法
  7. python——sort方法、sorted函数——排序
  8. 写了个项目 Web-Rtmp: 使用 WebSocket 在网页上播放 RTMP 直播流
  9. 分布式ID生成器解决方案
  10. 主板 稳定测试软件,拷机必不可少 编辑推荐几款稳定性测试软件
  11. windows无法格式化u盘_U盘修复无法格式化的解决方法
  12. 怎么用软件测试iPad,Apple:如何在iphone、ipad上安装一些常用命令行命令
  13. 力叩经典题--俩数之和
  14. bcm5396交换机级联配置_工业以太网交换机的专业术语汇总
  15. 用malloc动态申请一个二维数组的三种方法
  16. 二、单链表的头插法建表和尾插法建表
  17. 孤独后厂村,IT人百态:30万互联网人跳不出的中国硅谷
  18. 设计模式(17)----中介者模式
  19. HMC5883L地磁传感器驱动
  20. h5微信js-sdk分享接口php,H5 微信JSSDK自定义分享代码模板

热门文章

  1. 中石油12203-Darker and Darker
  2. 如何上传工资表在微信查询---智慧查询
  3. IDEA Material Theme UI 暗黑系主题的安装
  4. 如何激励公司员工最有效?
  5. 小红书MVP系统架构与技术选型(一)
  6. 宝塔下安装nodejs
  7. 禁用Ubuntu 16.04.4 LTS 图形登陆界面只能选择guest账号登陆
  8. linux kernel idr机制
  9. Python 将TXT格式转换为手机通讯录格式vcf
  10. Potplayer快速裁取视频(适用截取比较短的视频)