首页
学习
活动
专区
圈层
工具
发布
社区首页 >专栏 >Python3基础(八) 模块

Python3基础(八) 模块

作者头像
用户7886150
修改2020-12-30 15:47:53
修改2020-12-30 15:47:53
5150
举报
文章被收录于专栏:bit哲学院bit哲学院

参考链接: 了解Python 3中的代码重用和模块化

在程序中定义函数可以实现代码重用。但当你的代码逐渐变得庞大时,你可能想要把它分割成几个文件,以便能够更简单地维护。同时,你希望在一个文件中写的代码能够被其他文件所重用,这时我们应该使用模块(module)。 

一、导入模块 

在Python中,一个.py文件就构成一个模块。一个模块中的定义可以导入(import)到另一个模块或主模块。 

比如你可以通过内置模块platform来查看你当前的操作平台信息: 

import platform

s = platform.platform()

print(s)

# 我的输出:Linux-3.15.8-200.fc20.x86_64-x86_64-with-fedora-20-Heisenbug又比如你可以通过内置模块time获取当前的时间: 

import time

s = time.ctime()

print(s)

# 输出:Mon Aug 18 16:04:57 2014 

每个模块有其私有的符号表,在该模块内部当成全局符号表来使用。 当我们将一个模块导入到当前模块时,只有被导入模块的名称被放入当前模块的全局符号表里,所以我们不用担心变量名发生冲突。 

其他几种导入方式: 

1、import a as b:导入模块a,并将模块a重命名为b。 

import time as x   

s = x.ctime()

print(s) 

2、from a import func:直接把模块内的函数或变量的名称导入当前模块符号表里。 

from time import ctime

s = ctime()   # 这时可以直接调用函数,而不用再使用time.ctime()

print(s)3、

from a import *:导入模块中所有的名字(以下划线开头的名字除外)到当前模块符号表里。

from time import *

s = ctime()   

print(s)

注意:导入 * 是不好的,因为它常常产生难以阅读的代码,并且会容易产生名字冲突。 

二、模块搜索路径 

当导入名为 a 的模块时, 解释器会先从内建模块尝试匹配,如果没找到,则将在 sys.path 记录的所有目录中搜索 a.py 文件,而sys.path则包括: 

当前程序所在目录标准库的安装目录操作系统环境变量PYTHONPATH所包含的目录 

变量 sys.path 是一个字符串列表,它为解释器指定了模块的搜索路径。它通过环境变量 PATHONPATH 初始化为一个默认路径,当没有设置 PYTHONPATH 时, 就使用内建默认值来初始化。你可以通过标准 list 操作来修改它: 

>>> import sys

>>> sys.path.append('/ufs/guido/lib/python')

三、模块的__name__ 

对于任何一个模块,模块的名字都可以通过全局变量 __name__得到: 

import time

s = time.__name__

print(s)    # 输出time 一个模块既可以在其它模块中导入使用,也可以当作脚本直接运行。不同的是,当导入到其他模块时,__name__的值是被导入模块的名字;而当作为脚本运行时,__name__的值被设为

“__main__”: 

# test.py

if __name__ == '__main__':

    print('This program is being run by itself')

else:

    print('I am being imported into another module')当作脚本执行:

$ python test.py 

This program is being run by itself当作导入模块使用:

>>> import test

I am being imported into another module

>>> 

四、dir() 函数 

在Python3基础六中我们提到,可以通过内置dir()函数查询一个类或者对象的所有属性。除此之外,我们还可以用它列出一个模块里定义的所有名字,它返回一个有序字串列表: 

>>> import builtins

>>> dir(builtins)

五、包 

可以把多个模块,即多个.py文件,放在同一个文件夹中,构成一个包(Package)。例如: 

sound/                          顶级包

      __init__.py               初始化这个声音包

      formats/                  格式转换子包

              __init__.py

              wavread.py

              wavwrite.py

              aiffread.py

              aiffwrite.py

              auread.py

              auwrite.py

              ...

      effects/                  音效子包

              __init__.py

              echo.py

              surround.py

              reverse.py

              ...

      filters/                  过滤器子包

              __init__.py

              equalizer.py

              vocoder.py

              karaoke.py

              ... 

注意:在每个包文件夹里都必须包含一个 __init__.py 的文件,告诉Python,该文件夹是一个包。__init__.py 可以是一个空文件。 

我们可以通过import 包名.模块名导入包中的子模块,例如: 

import sound.effects.echo当然,也可以使用

from... import...句式导入包中的模块: 

from sound.effects import echo               # 导入echo子模块

from sound.effects.echo import echofilter    # 导入echo子模块中的函数或变量

from sound.effects import *                  # 导入__all__变量中所有的子模块

个人站点:http://songlee24.github.com

本文系转载,前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文系转载前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

评论
登录后参与评论
0 条评论
热度
最新
推荐阅读
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档