通俗一点地解释
Pycharm创建普通的directory和package时都是在硬盘上建立一个文件夹。但是建package时会在这个文件夹中自动地生成一个空的__init__.py文件。
Python的一个包是一个带有特殊文件 __init__.py 的目录。__init__.py 文件定义了包的属性和方法。其实它可以什么也不定义;可以只是一个空文件,但是必须存在。如果 __init__.py 不存在,这个目录就仅仅是一个目录,而不是一个包,它就不能被导入或者包含其它的模块和嵌套包。
来点高大上
对于Python而言,有一点是要认识明确的,python作为一个相对而言轻量级的,易用的脚本语言(当然其功能并不仅限于此,在此只是讨论该特点),随着程序的增长,可能想要把它分成几个文件,以便逻辑更加清晰,更好维护,亦或想要在几个程序中均使用某个函数,而不必将其复制粘贴到所有程序中。
为了支持这一点,Python有一种方法将定义函数放在一个文件中,并在脚本中使用它们,这样的文件叫做模块,一个模块中的定义可以被导入到其他模块,或者主模块中。
简单来说在python中模块就是指一个py文件,如果我们将所有相关的代码都放在一个py文件中,则该py文件既是程序由是模块,但是程序和模块的设计目的是不同的,程序的目的是为了运行,而模块的目的是为了其他程序进行引用。
Directory:
Dictionary在pycharm中就是一个文件夹,放置资源文件,对应于在进行JavaWeb开发时用于放置css/js文件的目录,或者说在进行物体识别时,用来存储背景图像的文件夹。该文件夹其中并不包含_ _ init.py_ _文件
Package(Python中将一个.py文件看作一个module):
对于Python package 文件夹而言,与Dictionary不同之处在于其会自动创建_ _ init.py_ _文件。
简单的说,python package就是一个目录,其中包括一组模块和一个_ _ init.py_ _文件。目录下具有init.py文件,这样可以通过from…import的方式进行.py文件的导入。
例子
如下通过几个例子进行说明,如何进行module的导入,目录结构如下:
假设file这个package是一个开源包,里面有一些现有的我们需要在one文件中使用的方法。
hello.py代码:
class package():
def Foo(self):
print "hello world"class two():
def Foo2(self):
print "hello Python"def write(str):
print str
对于module的导入,个人认为有如下方式:
(1)形式:import module(将整个模块全部导入)
import file.hello
o = file.hello.package() #可能同时import多个module,因此使用的方法需要说明是哪个module中 的方法
o.Foo()
file.hello.write("hello")#说明是file.hello这个module中的write方法
(2)from module import 需要用的类名或方法名
from file.hello import package,write
o = package() #已经声明了导入的package是file.hello这个module的,因此不必再使用前缀
o.Foo()
write("hello")
(3)from package(包) import module
from image import hello
hello.write("hello")
o = hello.package() #同样可能导入了多个模块,因此需要注明是哪个模块的
o.Foo()
需要注意的是,可以从package中进行import,但是对directory无法进行import,想导入某个文件夹中的.py文件,必须有init.py文件,在module导入之后就可以使用module中的类,函数,变量。
注:以上内容皆来自于网络,便于学习整理成册!
点个赞那吧!