知行编程网知行编程网  2022-10-19 08:30 知行编程网 隐藏边栏  4 
文章评分 0 次,平均分 0.0
导语: 本文主要介绍了关于python packages是什么意思的相关知识,希望可以帮到处于编程学习途中的小伙伴

python包

包是指包,它是一个分层的文件目录结构,定义了一个由n个模块或n个子包组成的python应用程序执行环境。通俗的讲:包就是一个目录,里面有一个__init__.py文件,这个目录必须有这个__init__.py文件和其他的模块或子包。

但这会分为两种情况,第一种是空的__init__.py文件,另一种是写有代码的__init__.py文件。无论是空的还是有内容的,这个目录都会被认为是一个包,它是一个标识符。


package的初始化工作

导入包时,__init__.py 中的代码只会执行一次

>>> import package
hello world
>>> import package
>>> import package

由于 __init__.py 中的可执行代码会在导入包时执行,因此请注意将代码放在包中以尽可能消除副作用,例如尽可能将代码封装成函数或类。


__init__.py内的导入顺序

当我尝试导入

from package import something

import 语句会先检查某个东西是否是 __init__.py 的变量,然后检查是否是子包,再检查是否是模块,最后抛出 ImportError。

所以检查顺序如下:

(1)__init__.py 文件内变量

(2)是不是package内的subpackage

(3)是不是package内的module


看个例子

我们有一个如下结构的package

在a.py文件内有一个函数

def bar():
    print("Hello, function 'bar' from module 'a' calling")

在b.py文件内有一个函数

def foo():
    print("Hello, function 'foo' from module 'b' calling")

然后我们添加一个空的__init__.py 文件在simple_package里面。

让我们看看当我们导入 simple_package 时会发生什么(在 simple_package 中激活 Python shell 或者 simple_package 的路径包含在 python 的 sys.path 或 PYTHONPATH 环境变量中)

>>> import simple_package
>>> 
>>> simple_package
<module 'simple_package' from '/home/bernd/Dropbox (Bodenseo)/websites/python-course.eu/examples/simple_package
/__init__.py'>
>>> 
>>> simple_package.a
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'a' is not defined
>>> 
>>> simple_package.b
Traceback (most recent call last):
  File "<stdin>", line 1, in <module>
NameError: name 'b' is not defined

我们可以看到simple_package已经导入成功,但是a.py和b.py还没有导入

当然,如果要使用 import simple_package 自动加载 a 或 b 模块,有两种方式。

首先是在__init__.py中导入a或b模块,然后保存并激活python交互环境

#__init__.py
import a
import b

当你尝试再次导入 simple_package 时,你可以使用 simple_package.a.bar() 来使用模块 a 中的 bar() 函数。

第二种方式是手动导入。当你想使用模块a中的bar()函数时,需要手动导入

import simple_package.a as a

然后就是可以a.bar()来使用bar()函数了。

本文为原创文章,版权归所有,欢迎分享本文,转载请保留出处!

知行编程网
知行编程网 关注:1    粉丝:1
这个人很懒,什么都没写
扫一扫二维码分享