模块和包¶
模块¶
Python**模块是一个包含有函数、变量、类和常量等等内容的python文件**。模块帮助我们将相关的代码组织在一起,例如math
模块拥有数学相关的函数。
创建模块¶
创建一个名为mymodule.py
的新文件,并写入下面的代码:
在这个文件中,我们定义了一个全部变量foo
和一个名为hello()
的方法。现在我们可以使用import
关键词来引入这个模块,并使用mymodule.py
中的变量和函数:
上述代码的运行结果如下:
如之前代码所示,调用模块的变量和函数时,需要指定模块的名称。
导入模块¶
当我们使用import
声明导入模块时,模块中的所有内容都被导入到当前文件中。如果我们只需要模块中的个别内容时该如何操作呢?使用from
关键词,就可以达到这样的目的,比如:
上述代码的运行结果为100。
当使用from improt
语句导入特定内容后,访问这些内容就不需要再使用模块名了。
包中含有多个子包时,可以使用绝对导入引用兄弟包中的子模块。例如,要在模块 sound.filters.vocoder
中使用 sound.effects
包的 echo
模块时,可以用 from sound.effects import echo
导入。
还可以用 import 语句的 from module import name
形式执行相对导入。这些导入语句使用前导句点表示相对导入中的当前包和父包。例如,相对于 surround
模块,可以使用:
注意,相对导入基于当前模块名。因为主模块名是 "__main__"
,所以 Python 程序的主模块必须始终使用绝对导入。
导入类时,也可为其指定别名。例如,要在程序中创建大量电动汽车实例,需要反复输入ElectricCar,非常烦琐。为避免这种烦恼,可在import语句中给ElectricCar指定一个别名:
现在每当需要创建电动汽车实例时,都可使用这个别名:
一开始应让代码结构尽可能简单。先尽可能在一个文件中完成所有的工作,确定一切都能正确运行后,再将类移到独立的模块中。
导入内部模块的三种情况¶
同级目录下的调用¶
程序结构如下:
若在程序test1.py
中导入模块mod1
, 则直接使用
调用子目录下的模块¶
程序结构如下:
这时看到test1.py
和lib
目录(即mod2.py
的父级目录),如果想在程序test1.py
中导入模块mod2.py
,可以在lib
件夹中建立空文件__init__.py
文件(也可以在该文件中自定义输出模块接口),然后使用:
调用上级目录下的文件¶
程序结构如下:
这里想要实现test2.py
调用mod1.py
和mod2.py
,做法是我们先跳到src
目录下面,直接可以调用mod1
,然后在lib
上当下建一个空文件__init__.py
,就可以像第二步调用子目录下的模块一样,通过from lib import mod2
进行调用了。具体代码如下:
使用dir函数查看模块内容¶
内置的 dir()
函数能够返回由对象所定义的名称列表。 如果这一对象是一个模块,则该列表会包括函数内所定义的函数、类与变量。
该函数接受参数。 如果参数是模块名称,函数将返回这一指定模块的名称列表。 如果没有提供参数,函数将返回当前模块的名称列表。
>>> import sys
# 给出 sys 模块中的属性名称
>>> dir(sys)
['__displayhook__', '__doc__',
'argv', 'builtin_module_names',
'version', 'version_info']
# only few entries shown here
# 给出当前模块的属性名称
>>> dir()
['__builtins__', '__doc__',
'__name__', '__package__']
# 创建一个新的变量 'a'
>>> a = 5
>>> dir()
['__builtins__', '__doc__', '__name__', '__package__', 'a']
包¶
包是指一个包含模块与一个特殊的 __init__.py
文件的文件夹,后者向 Python 表明这一文件夹是特别的,因为其包含了 Python 模块。
假设你想创建一个名为“world”的包,其中还包含着 "asia"、"africa"等其它子包,同时这些子包都包含了诸如"india"、"madagascar"等模块。下面是你会构建出的文件夹的结构:
- <some folder present in the sys.path>/
- world/
- __init__.py
- asia/
- __init__.py
- india/
- __init__.py
- foo.py
- africa/
- __init__.py
- madagascar/
- __init__.py
- bar.py
包是一种能够方便地分层组织模块的方式。
库¶
Python中的库(library)是借用其他编程语言的概念,没有特别具体的定义,严格来说Python中是没有库的概念。大多数情况下,人们认为库着重强调其功能性。在Python中,具有某些功能的模块和包都可以被称作库。 模块有诸多函数组成,包由诸多模块机构化组成,库中也可以包含包、模块和函数。
参考文献¶
创建日期: 2021年9月12日 05:55:32