文章目录

  • 什么是模块
  • 导入模块的机制
    • 模块定位顺序
    • 注意事项:
    • `__all__`
  • 使用模块的好处

什么是模块


就是一个.py 文件

这个.py文件可以有:

  1. 函数def fun():
  2. 类以及类方法、类成员等class cls():
  3. 变量math.pi=3.1415926
  4. 可执行语句

看一个math模块:

# encoding= utf-8
# take_a_look_at_math.py
import mathprint(math)
print(id(math))
print(type(math))
print(math.pi)
print(dir(math))
print(math.log2(4))

执行take_a_look_at_math.py控制台输出:

<module 'math' (built-in)>
1605259056448
<class 'module'>
3.141592653589793
['__doc__', '__loader__', '__name__', '__package__', '__spec__', 'acos', 'acosh', 'asin', 'asinh', 'atan', 'atan2', 'atanh', 'ceil', 'comb', 'copysign', 'cos', 'cosh', 'degrees', 'dist', 'e', 'erf', 'erfc', 'exp', 'expm1', 'fabs', 'factorial', 'floor', 'fmod', 'frexp', 'fsum', 'gamma', 'gcd', 'hypot', 'inf', 'isclose', 'isfinite', 'isinf', 'isnan', 'isqrt', 'lcm', 'ldexp', 'lgamma', 'log', 'log10', 'log1p', 'log2', 'modf', 'nan', 'nextafter', 'perm', 'pi', 'pow', 'prod', 'radians', 'remainder', 'sin', 'sinh', 'sqrt', 'tan', 'tanh', 'tau', 'trunc', 'ulp']
2.0Process finished with exit code 0

导入模块的机制

  • import 模块名
  • from 模块名 import 功能名
  • from 模块名 import * import 模块名 as 别名
  • from 模块名 import 功能名 as 别名
# encoding: utf-8
# module moduleA
"""
This module is a module for test
"""
a = 123def testPrint():print(a)

在和moduleA相同的文件夹下创建main.py 代码如下:

# 这是main.py文件
import moduleA

执行main.py,控制台输出:

123Process finished with exit code 0

如果不想让main.py导入moduleA时,不去执行里面的testPrint():
那么moduleA.py改成如下:

# encoding: utf-8
# module moduleA
"""
This module is a module for test
"""
a = 123def testPrint():print(a)if __name__ == '__main__':
# 加入了这一行,其他文件中导入moduleA就不会执行testPrint()testPrint()

为什么加个if __name__ == '__main__': 就行了呢?

以主程序形式运行:

每个模块(如moduleA)的定义中,都包括阔一个记录模块名称的变量__name__,程序检查该变量,确定他(如moduleA)在哪个模块中执行。

如果一个模块不是被导入到其他程序中执行,(比如moduleA自己执行自己。而不是被main.py导入执行),那么它可能在解释器的顶级模块中执行。顶级模块的__name__的变量值为__main__

试一下:
moduleA.py

# encoding: utf-8
# module moduleA
"""
This module is a module for test
"""
a = 123def testPrint():print(a)print(__name__)   # 打印自己的模块名
if __name__ == '__main__':  # 加入了这一行,其他文件中导入moduleA就不会执行testPrint()testPrint()

main.py:

# main.py 只导入moduleA
# 执行后会执行module中的testPrint()
import moduleA
print(__name__)

执行main.py控制台输出:

moduleA
__main__Process finished with exit code 0

执行moduleA.py控制台输出:

__main__
123Process finished with exit code 0

模块定位顺序

  1. 当前⽬录
  2. shell变量PYTHONPATH下的每个⽬录。
  3. Python会察看默认路径。UNIX下,默认路径⼀般为/usr/local/lib/python/

模块搜索路径存储在system模块的sys.path变量中。

注意事项:

如果连续导入的两个或多个不同的模块譬如(mA 、 mA’、mA’’…)

但模块名字一样。

在代码中调用的模块时,会使用哪个模块呢?

因为程序时一行一行往下,所以,

可以猜测,最后一个导入的同名模块才会被调用。

试一下:

# 模块1代码
def my_test(a, b):print(a + b)
# 模块2代码
def my_test(a, b):print(a - b)# 导⼊模块和调⽤功能代码
from my_module1 import my_test
from my_module2 import my_test
# my_test函数是模块2中的函数
my_test(1, 1)

输出:0


__all__

如果⼀个模块⽂件中有 __all__ 变量,

当使⽤ from xxx import * 导⼊时

只能导⼊这个列表中的元素。

moduleA.py:

__all__ = ['testA']
def testA():print('testA')
def testB():print('testB')

main.py:

from moduleA import *
testA()
testB()

输出:

test A
Traceback ....NameError: name 'testB' is not defined

使用模块的好处

这个需要自己感受:

比如可以很偷懒——代码复用


本篇结束

Python中的模块(Modules)相关推荐

  1. Python 中的模块和包

    原文引至:前端小吉米 对于python中的模块和包, 我简直就想说, js nmlgb 就是一个 trash... 在前端写js根本就没有什么模块和包, 全部都是全局... 真lj... 畅快了. 写 ...

  2. python中sys模块是什么内容_python中sys模块是做什么用的

    python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数:sys.platform函数用于获取当前系统平台. sys模块提供了 ...

  3. python中sys模块有问题_python中sys模块之输入输出错误流

    import sys sys.stdout.write("msg")   # 控制台白色字体打印 普通输出流 sys.stderr.write("msg") # ...

  4. python sys模块作用_浅谈Python中的模块

    模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...

  5. python中Scipy模块求取积分

    python中Scipy模块求取积分的方法: SciPy下实现求函数的积分的函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是求曲线下面积之和. 其中rn可认为是偏差,一般可以忽略不计,wi可 ...

  6. python中的time库安装步骤-python中time模块需要安装么

    time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数. time模块中时间表现的格式主要有三种:(推荐学习:Python视频教程) timestamp时间戳,是以秒表示从& ...

  7. 关于python中requests模块导入问题-python中requests模块的使用方法

    本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...

  8. python哪里下载import包-详解python中的模块及包导入

    python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...

  9. python中copy模块的使用,深拷贝和浅拷贝

    python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...

最新文章

  1. Power Shell03 在PowerShell 3.0重新启动计算机指令
  2. jsonp+ajax实现浏览器跨域通信
  3. Docker的安装和Redis容器
  4. JVM实战与原理---内存回收策略
  5. 负数如何归一化处理_小白的图像处理入门(一)
  6. c# 找出目录下的所有子目录_Linux操作系统文件目录
  7. 防火墙(4)——iptables(2)增加修改规则-A -R
  8. 梅朵是藏语鲜花的意思
  9. Cocoapods的安装和使用
  10. 地方商城门户网页模板-商城模板
  11. mongodb 集群shard_mongodb单机配置shard分片集群
  12. .ps文件怎么打开_ps界面的认识及文件的打开
  13. zk里面调用javascript方法
  14. git revert 之后怎么撤销_Git 如何优雅地回退代码
  15. Oh-My-Zsh 下远程ssh的乱码问题
  16. IDL处理葵花8Himawari-8标准HSD数据——制作大气校正数据集(太阳角度数据集)
  17. 八大行业Hadoop大数据应用回顾和展望
  18. python QRcode
  19. 你应该知道的常见的http协议状态
  20. 实力见证,再度折桂 | 云扩科技入选《The Forrester Wave 中国RPA行业发展报告, Q3 2022》

热门文章

  1. 计算机专业台式机好还是笔记本,科普:台式机显卡和笔记本显卡有啥不同?
  2. busybox的作用和功能
  3. ARM内核和架构都是什么意思,它们到底是什么关系?
  4. JAVA安装教程 (windows)
  5. 数据抓取之数据抓取流程
  6. 江苏农信:依托云管平台构建行业云统一服务门户
  7. WPF入门教程系列七——布局之WrapPanel与StackPanel(二)
  8. Go 语言调度(三): 并发
  9. php四舍五入进一,php 四舍五入的三种方法
  10. 图片转换器怎么将HEIC转换为JPG