Python中的模块(Modules)
文章目录
- 什么是模块
- 导入模块的机制
- 模块定位顺序
- 注意事项:
- `__all__`
- 使用模块的好处
什么是模块
就是一个.py 文件
这个.py文件可以有:
- 函数
def fun():
- 类以及类方法、类成员等
class cls():
- 变量
math.pi=3.1415926
- 可执行语句
看一个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
模块定位顺序
- 当前⽬录
- shell变量PYTHONPATH下的每个⽬录。
- 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)相关推荐
- Python 中的模块和包
原文引至:前端小吉米 对于python中的模块和包, 我简直就想说, js nmlgb 就是一个 trash... 在前端写js根本就没有什么模块和包, 全部都是全局... 真lj... 畅快了. 写 ...
- python中sys模块是什么内容_python中sys模块是做什么用的
python中的sys是提供了一系列有关python运行环境的变量和函数的模块,如sys.argv函数实现从程序外部向程序传递参数:sys.platform函数用于获取当前系统平台. sys模块提供了 ...
- python中sys模块有问题_python中sys模块之输入输出错误流
import sys sys.stdout.write("msg") # 控制台白色字体打印 普通输出流 sys.stderr.write("msg") # ...
- python sys模块作用_浅谈Python中的模块
模块 为了编写可维护的代码,我们把很多函数分组,分别放到不同的文件里,这样,每个文件包含的代码就相对较少,很多编程语言都采用这种组织代码的方式.在Python中,一个.py文件就称之为一个模块(Mod ...
- python中Scipy模块求取积分
python中Scipy模块求取积分的方法: SciPy下实现求函数的积分的函数的基本使用,积分,高等数学里有大量的讲述,基本意思就是求曲线下面积之和. 其中rn可认为是偏差,一般可以忽略不计,wi可 ...
- python中的time库安装步骤-python中time模块需要安装么
time是python自带的模块,用于处理时间问题,提供了一系列的操作时间的函数. time模块中时间表现的格式主要有三种:(推荐学习:Python视频教程) timestamp时间戳,是以秒表示从& ...
- 关于python中requests模块导入问题-python中requests模块的使用方法
本文实例讲述了python中requests模块的使用方法.分享给大家供大家参考.具体分析如下: 在HTTP相关处理中使用python是不必要的麻烦,这包括urllib2模块以巨大的复杂性代价获取综合 ...
- python哪里下载import包-详解python中的模块及包导入
python中的导入关键字:import 以及from import 1.import import一般用于导入包以及模块. 不过有个小问题: (1)当导入的是模块的时候是可以直接可以使用模块内的函数 ...
- python中copy模块的使用,深拷贝和浅拷贝
python中copy模块的使用,深拷贝和浅拷贝 文章目录: 一.copy模块的介绍 1.copy模块 二.copy模块的使用 拓展说明: 1.id( )函数的使用 2.is和== 的区别 pytho ...
最新文章
- Power Shell03 在PowerShell 3.0重新启动计算机指令
- jsonp+ajax实现浏览器跨域通信
- Docker的安装和Redis容器
- JVM实战与原理---内存回收策略
- 负数如何归一化处理_小白的图像处理入门(一)
- c# 找出目录下的所有子目录_Linux操作系统文件目录
- 防火墙(4)——iptables(2)增加修改规则-A -R
- 梅朵是藏语鲜花的意思
- Cocoapods的安装和使用
- 地方商城门户网页模板-商城模板
- mongodb 集群shard_mongodb单机配置shard分片集群
- .ps文件怎么打开_ps界面的认识及文件的打开
- zk里面调用javascript方法
- git revert 之后怎么撤销_Git 如何优雅地回退代码
- Oh-My-Zsh 下远程ssh的乱码问题
- IDL处理葵花8Himawari-8标准HSD数据——制作大气校正数据集(太阳角度数据集)
- 八大行业Hadoop大数据应用回顾和展望
- python QRcode
- 你应该知道的常见的http协议状态
- 实力见证,再度折桂 | 云扩科技入选《The Forrester Wave 中国RPA行业发展报告, Q3 2022》