点击关注我哦

一篇文章带你了解如何优雅的创建__init__.py文件

什么是 Python 包?

《数据科学家的模块化编程指南》文章中,我们介绍了:Python 包只是一个有组织的 Python 模块集合,而 Python 模块只是一个单独的 Python 文件。

为什么我要使用__init__.py?

使用 _init _. py 创建一个软件包就是为了让开发更大的 Python 项目变得更容易。它提供了一种机制,可以将单独的 python 脚本分组到单个可导入模块中。

让我们来看一些例子

理解为什么要使用__init__.py并且学习如何使用它来创建一个包的最好方法是通过一些快速的例子运行!最好的学习方法就是实践!

本教程中的代码应该适用于 Python 3。

假设我们创建了三个模块:

someFolder|-- stringLength.py|-- stringToUpper.py`-- stringToLower.py

记住,模块只是任何单个 python 文件的另一个名称

对于我们的例子,这些文件的内容如下:

# stringLength.py
def stringLength(inStr):    return len(inStr)
# stringToUpper.py
def stringToUpper(inStr):    return inStr.upper()
# stringToLower.py
def stringToLower(inStr):    return inStr.lower()

显然,这些函数是无用的,但是作为一个基本概念的模型是有帮助的,我们已经编写了一些以某种方式相关的 python 模块。

那么,如果不创建一个包并使用 _init _. py,我们如何使用这些文件中的函数呢?

我们只能导入这些文件,如果它们位于我们正在运行的脚本所在的工作目录中。

我们可以在一个新的 Python 脚本中使用这些文件,但有一个关键的警告:

The files must be in the same directory as the script we are trying to use them in. 

为了说明这一点,让我们创建一个名为 example1.py 的文件,它利用了我们的模块:

# example1.py
import stringLengthimport stringToLowerimport stringToUpper
some_string = "Hello, Universe!"
print(stringLength.stringLength(some_string))print(stringToLower.stringToLower(some_string))print(stringToUpper.stringToUpper(some_string))

添加一个空白__init__.py

如果我们想要将这些脚本分离到一个文件夹中,以使它们更有组织性,那会怎么样呢?

这就是 __init__. py文件发挥作用的地方。

首先,让我们将脚本移动到一个新的子文件夹中,并将其命名为 string _func。然后在该文件夹中创建一个名为__init__.py 的空文件。

下面是我们新的文件/文件夹结构:

someFolder|-- string_func|   |-- __init__.py|   |-- stringToUpper.py|   |-- stringToLower.py|   `-- strengthLength.py`-- example1.py

所以,现在让我们测试一下__init__. py到底允许我们做什么:

让我们创建一个新的 example2.py 文件。

# example2.py
import string_func.stringLengthimport string_func.stringToLowerimport string_func.stringToUpper
some_string = "Hello, Universe!"
print(string_func.stringLength.stringLength(some_string))print(string_func.stringToLower.stringToLower(some_string))print(string_func.stringToUpper.stringToUpper(some_string))

现在,我们可以以这种方式访问字符串函数。这很好,因为它们都在一个独立的文件夹中,但语法肯定不是很简洁。让我们看看我们是否可以通过编辑 __init__. py来改善一下。

将import 加入到__init__.py中

打开你的__init__.py文件并做以下更改:

# __init__.pyfrom .stringLength import stringLengthfrom .stringToLower import stringToLowerfrom .stringToUpper import stringToUpper

因此,在我们的__init__.py中,我们现在可以将代码缩短为:

# example3.py
import string_func
some_string = "Hello, Universe!"
print(string_func.stringLength(some_string))print(string_func.stringToLower(some_string))print(string_func.stringToUpper(some_string))

现在语法变得更简洁了,你可以看到 string _ func 调用函数就像它使用自己的模块一样。

所以,这基本上就是__init__.py的功劳!它允许您将目录当作 python 模块来处理。然后可以在__init__.py文件中进一步定义和导入,或者也可以将该文件保留为空白。

调试import问题

对于调试import的问题,一般有三个基本的技巧:

1. 使用交互式解释器(REPL)导入模块,并查看是否得到了所期望的结果;

2. 使用 python -v -m my _ scriptname.py 启动脚本,然后检查输出,确切查看从哪里导入模块;

3. 使用 Pycharm。Pycharm 神奇的内省能力意味着您将立即知道您的模块是否被正确导入,因为如果没有导入,它将表明一个错误。它有时也会建议进行适当的修正。社区版是免费的,如果你是一个学生,你可以免费订阅他们的所有产品!

·  END  ·

HAPPY LIFE

如何优雅的创建__init__.py文件?相关推荐

  1. Python3中__init__.py文件介绍

          Python中的模块是包含Python定义和语句的文件(A module is a file containing Python definitions and statements),其 ...

  2. init自定义python_Python自定义Module中__init__.py文件介绍

    ./pyModuleTest/ ├── addutil │   ├── add.py │   ├── add.pyc │   ├── __init__.py │   ├── __init__.pyc ...

  3. 第四章:Python项目组织结构-第一节:包、模块以及__init__.py文件

    部分参考:菜鸟教程 文章目录 思维导图 一:Python项目组织结构 (1)Python项目组织结构 (2)包与模块的作用 (3)包与模块的名字 二:导入模块 (1)import (2)from... ...

  4. 魔方APP项目-02-服务端项目搭建,创建manage.py文件、构建全局初始化函数创建app应用对象、通过终端脚本启动项目、项目加载配置、数据库初始化、日志初始化、蓝图初始化

    服务端项目搭建 新建项目目录mofangapi,并创建虚拟环境 mkvirtualenv mofang 安装开发中使用的依赖模块 pip install flask==0.12.4 pip insta ...

  5. Python模块包中__init__.py文件的作用

    2019独角兽企业重金招聘Python工程师标准>>> 在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自 ...

  6. python type help copyright_Python关于import的实验(8)__init__.py文件内部代码的执行以及内部的导入和内部的变量...

    Python官方文档参考链接: 常规包 Python 定义了两种类型的包,常规包 和 命名空间包. 常规包是传统的包类型,它们在 Python 3.2 及之前就已存在. 常规包通常以一个包含 __in ...

  7. python模块 init py_Python模块包中__init__.py文件的作用

    在eclipse中用pydev开发Python脚本时,我遇到了一个这样的现象,当我新建一个pydev package时,总会自动地生成一个空的__init__.py文件,因为是python新手,所以很 ...

  8. Python模块包中__init__.py文件的作用(转载)

    用django做开发已经一年多的时间,但基本没注意python模块中__init__.py文件存在的意义,偶然看到对它的介绍吓一大跳,这个文件太重要了 模块包: 包通常总是一个目录,目录下为首的一个文 ...

  9. python中__init__文件的运用_python中__init__.py文件的作用

    1.很多地方的文件夹都有__init__.py.网上一般都说,有了这个东西会把它当作一个包,否则import这个文件夹会出错. 但这就好像和说python文件中如果有中文就要在开头写 # coding ...

最新文章

  1. 资源 |“从蒙圈到入坑”,推荐新一波ML、DL、RL以及数学基础等干货资源
  2. 车辆行人检测数据集_开源 | 相机和激光雷达融合的行人车辆检测跟踪
  3. 计算机程序无法运行,win7电脑程序打不开解决方法
  4. 《江南百景图》游戏设计小思考:留边占角“小烦恼”
  5. Java基础—反射—简单介绍
  6. 请写出至少五个块级元素_html 行级元素和块级元素标签列表分别有哪些
  7. liunx -bash:ls:command not found,执行命令总是报找不到
  8. linux服务器下降,linux - 远程升级Ubuntu:如何最大程度地降低丢失服务器的风险? - Ubuntu问答...
  9. 矩阵论及其应用_数值分析篇——向量和矩阵的范数
  10. Codeforces 869C The Intriguing Obsession
  11. 怎么区分08cms房产系统V8.2/V8.3和旧版8.0以及8.1他们的区别不仅仅是破解版
  12. python是一种什么类型的编程_python是什么类型的编程语言
  13. sql中别名as,不写,以及使用双引号总结
  14. 演讲实录丨朱频频 让Bots无处不在
  15. 1米*1米*1米*1米*1米等于什么?
  16. Vert.x(vertx) Web开发-路由
  17. Linux切换用户su root 与 su - root 的区别
  18. JDPaint5.5北京精雕浮雕建模与编程加工视频教程
  19. 笔下文学小说下载【3.01】 发布
  20. google什么时候倒闭(搜索引擎的发展趋势)

热门文章

  1. beta冲刺总结-咸鱼
  2. 【转】为猿七年有余,痒否?痛否?
  3. 2023年学什么技术尤其吃香,学什么技术好
  4. 虚拟机Centos 7 使用命令 ip addr 不显示IP地址
  5. 活动预告 | CodeWisdom 软件智能化开发与运维学术报告系列 第5期(高祥 北京航空航天大学)...
  6. ubuntu 解压文件
  7. Linux系统基础教程(2)
  8. origin计算机丢失,原因:CORS 头缺少 ‘Access-Control-Allow-Origin’ 解决办法
  9. UI自动化uiautomator2
  10. 郭健: Linux进程调度技术的前世今生之“前世”