python中自定义module的方法及注意事项
在编写python程序的过程中,不可避免的需要自定义一些python的类和函数。有时候定义的函数太多,就要根据用途放到不同的module(模块)中去,项目更大时,需要将这些module再分类,放到不同的package(包)中,以方便管理。
可以这样理解,module就是*.py
文件,里面定义了一些类,函数及变量,可以被其他程序调用;将不同的module整合到一个文件夹中,就得到了package,为了实现对其中的module的管理,package中往往需要有一个__init__.py
文件。
1.最简单的方法:定义单个module
这种方法是最直观、最简单的,也是我目前为止使用频率最高的。在python中,每一个*.py
文件都可以被其他的python程序所引用。如图1,在pycharm中我建立了一个python_module_test的项目:
现在里面只有两个文件:my_module.py
和run.py
,其代码分别为:
# my_module.py
import time as tvar1 = t.time()
var2 = 'This is a long string'
var3 = 89
# run.py
from my_module import *print(var1)
print(var2)
print(var3)
print(t.time())
在python窗口运行run.py
后,打印如下信息:
很明显,run.py
脚本导入了my_module.py
中的所有的变量(var1
、var2
、var3
)及my_module.py
中导入的包(t
)。
2.如果module在文件夹中会如何?
上面的例子中,run.py
与my_module.py
在同一级目录下,调用起来没什么问题,但如果my_module.py
在一个文件夹中,该如何处理呢?
更改项目结构如下:
python_module_test├──pkg│ └──my_module.py└──run.py
然后注意修改一下run.py
中的第一代码行为from pkg.my_module import *
。
按照我在网上查的大部分资料的说法,这个时候python并不会将pkg
这个目录视为包,因为其中缺少__init__.py
文件。那么我们来实际运行一下吧:
这次我直接在Terminal窗口运行的python run.py
命令,输出正常。那么交互式运行的结果呢?
可以看出,仍然可以运行。
这是否就说明一个package中__init__.py
文件的存在与否是无关紧要的呢?显然,并不是这样的,为了说明这一点,先看一下python中有哪些导入方式。
3.python中包、模块和函数的导入方式
在上面的例子中,我们都是用的from something import *
的方式进行导入模块和变量,另外的一种导入方式就是import something as sth
。下面总结一下这两种导入方式的注意点,这里参考了这篇博客的内容。
- 方式1:
import pkg.subPkg.module as alias
如果不指定alias
,那么每次调用module
中的变量和方法时,必须全路径调用,如pkg.subPkg.module.var1
; - 方式2.0:
from pkg.subPkg import module
这种方法可以直接调用module.var1
,当然,你也可以将module
另外指定一个别名,并用别名去调用; - 方式2.1:
from pkg.subPkg.module import var1
这种方式直接导入了模块中的指定变量(函数、类等)。
总的来看,导入语句或者为import ...
的形式,或者为from ... import ...
的形式。
- 当以
import ...
的方式导入时,最终import
的内容必须为包或者模块,而不能是类、函数或变量等定义在模块中的具体内容。例如:import A.B.C
,那么A,B一定是一个package,C一定是一个package或者module。 - 当以
from ...
的方式导入时,最终import
的内容可以是包、模块或者类、函数、变量。例如:from A.B import C
,那么A一定是一个package,B可以是package,也可以是module;C可以是package、module或者变量、函数、类等任意一种。
4.__init__.py
文件的作用
from ...
导入方式中,有一种不被推荐的写法就是from A import *
,这可能会导致变量的冲突,但是当你十分清楚A中的所有模块(变量)时,这样做并没有什么问题。仍然以上文中的项目结构为例,在python命令框执行以下代码会报错:
这说明,python并没有将模块module.py
导入到环境中去,解决的办法,就是为包pkg
添加__init__.py
文件,对该包中的模块等资源进行管理。修改后的项目结构如下:
python_module_test├──pkg│ ├──__init__.py │ └──my_module.py└──run.py
其中,__init__.py
的内容为:
# __init__.py
__all__=['my_module']
这时,再执行上述代码,结果如下:
这说明,__init__.py
文件中的__all__
参数控制该包中哪些模块(变量)可以以from pkg import *
的方式导入被导入。用户也可以在__init__.py
文件中定义其他的变量、类以及函数,然后将这些名字以字符串添加到__all__
列表中,这样在就可以被导入到运行环境中去。
python中自定义module的方法及注意事项相关推荐
- Python中自定义函数的方法
在Python编程中,可以使用已经定义好的函数,也可以自定义函数实现某些特殊的功能. 1 自定义函数的语法 在Python中,自定义函数的语法如下所示 def 函数名(参数):函数体 其中,def是关 ...
- python导入自定义模块_ubuntu下Python导入自定义模块的方法
ubuntu下Python导入自定义模块的方法 当在python程序中导入自定义模块时,若出现"Import Error:no module named xxx"表明系统在pyth ...
- python中callable_Python abc.Callable方法代码示例
本文整理汇总了Python中collections.abc.Callable方法的典型用法代码示例.如果您正苦于以下问题:Python abc.Callable方法的具体用法?Python abc.C ...
- python中的module
Python中的Module是比较重要的概念.常见的情况是,事先写好一个.py文件,在另一个文件中需要import时,将事先写好的.py文件拷贝到当前目录,或者是在sys.path中增加事先写好的.p ...
- python中类方法与实例方法的区别-Python中的对象,方法,类,实例,函数用法分析...
本文实例分析了Python中的对象,方法,类,实例,函数用法.分享给大家供大家参考.具体分析如下: Python是一个完全面向对象的语言.不仅实例是对象,类,函数,方法也都是对象. class Foo ...
- python使用del保留字定义一个函数-python中自定义函数的保留字是
基本使用(推荐学习:Python视频教程)def function_name(parameters): expressions Python使用def开始函数定义,紧接着是函数名,括号内部为函数的参数 ...
- python中模块(Module)和包(Package)的区别 (导入模块、导入包)(import导包)
如下结构,mycompany就是包,abc.py和xyz.py就是模块 mycompany ├─ __init__.py ├─ abc.py └─ xyz.py 参考文章:Python中模块(Modu ...
- python grpc 并发_在Python中使用gRPC的方法示例【h】
本文介绍了在Python中使用gRPC的方法示例,分享给大家,具体如下: 使用Protocol Buffers的跨平台RPC系统. 安装 使用 pip gRPC由两个部分构成,grpcio 和 gRP ...
- python中列表的sort方法_python中列表的sort方法使用详解
内容简介:python中列表的sort方法使用详解 一.基本形式 列表有自己的sort方法,其对列表进行原址排序,既然是原址排序,那显然元组不可能拥有这种方法,因为元组是不可修改的. 排序,数字.字符 ...
最新文章
- 百度paddle学习笔记
- 5大典型模型测试单机训练速度超对标框架,飞桨如何做到?
- 数据分析:JSON格式数据
- 业务知识——Logger日志打印规范
- linux ntp手动授时,关于我校NTP授时服务的使用说明
- Linux netfilter源码分析(5)
- Visual Studio 2010修改授权
- 再提手机上网应该包月计费
- Java 多线程执行
- Linux搭建Zabbix监控服务
- CSDN答疑:按行累加
- 如何避免出现SQL注入漏洞
- 人人商城前端小程序如何配置使用教程
- 第15课:JSP动作 Jsp forward动作(JSP教程 JSP入门实战教程 黄菊华Java网站开发系列教程)
- 阿酷三合一版_阿酷插件3.2开源版
- 网络视频ts格式文件下载及将其合成单一视频文件
- 财富提升成都IT产业吸引力
- Microsoft Office Home and Student Edition 2013 All-in-One For Dummies 免积分下载
- 中国机器人界“诺贝尔奖”!深眸科技实力斩获恰佩克年度创新品牌奖
- 移动硬盘坏了数据可以恢复吗 移动硬盘坏了怎么导出数据