Loading

python-模块

  • 简介

模块是一个包含所有你定义的函数和变量的文件,其后缀名是.py

模块可以被别的程序引入,以使用该模块中的函数等功能(这是程序多次复用的基础)

这也是使用 python 标准库的方法

  • 导入模块

使用import导入模块后,解释器会在目录中搜索该模块文件

此处的目录存储在sys.path这个列表里面

 import sys
 sys.path
 # ['', '/usr/lib/python3.4', '/usr/lib/python3.4/plat-x86_64-linux-gnu', '/usr/lib/python3.4/lib-dynload', '/usr/local/lib/python3.4/dist-packages', '/usr/lib/python3/dist-packages']

第一个空串表示当前所在的目录,解释器会首先搜索当前目录

sys.path.append("D:\\test")

使用如上方式可以为搜索的位置添加一个目录

一个模块只会被导入一次,不管你执行了多少次import。这样可以防止导入模块被一遍又一遍地执行。

from modname import name1[, name2[, ... nameN]]

不会把整个模块导入到当前的命名空间中,它只会将模块里的函数引入进来

  • 模块特性

模块除了方法定义,还可以包括可执行的代码

可执行代码一般用来初始化这个模块,只有在第一次被导入时才会被执行(剩余的就是一些可以被调用的方法或者函数)

一个模块被另一个程序第一次引入时,其主程序将运行

如果我们想在模块被引入时,模块中的某一程序块不执行,我们可以用__name__属性(表示这个程序是在被调用还是自身在执行)来使该程序块仅在该模块自身运行时执行

每个模块都有一个__name__(双下划线)属性,当其值是'__main__'时,表明该模块自身在运行,否则是被引入

if __name__ == '__main__':
   print('程序自身在运行')
else:
   print('我来自另一模块')
# $ python using_name.py
程序自身在运行
# $ python
# import using_name
# 我来自另一模块

内置的函数dir()可以找到模块内定义的所有名称

 dir(sys)  
# ['__displayhook__', '__doc__', '__excepthook__', '__loader__', '__name__',
 '__package__', '__stderr__', '__stdin__', '__stdout__',
 '_clear_type_cache', '_current_frames', '_debugmallocstats', '_getframe',
 '_home', '_mercurial', '_xoptions', 'abiflags', 'api_version', 'argv',
 'base_exec_prefix', 'base_prefix', 'builtin_module_names', 'byteorder',
 'call_tracing', 'callstats', 'copyright', 'displayhook',
 'dont_write_bytecode', 'exc_info', 'excepthook', 'exec_prefix',
 'executable', 'exit', 'flags', 'float_info', 'float_repr_style',
 'getcheckinterval', 'getdefaultencoding', 'getdlopenflags',
 'getfilesystemencoding', 'getobjects', 'getprofile', 'getrecursionlimit',
 'getrefcount', 'getsizeof', 'getswitchinterval', 'gettotalrefcount',
 'gettrace', 'hash_info', 'hexversion', 'implementation', 'int_info',
 'intern', 'maxsize', 'maxunicode', 'meta_path', 'modules', 'path',
 'path_hooks', 'path_importer_cache', 'platform', 'prefix', 'ps1',
 'setcheckinterval', 'setdlopenflags', 'setprofile', 'setrecursionlimit',
 'setswitchinterval', 'settrace', 'stderr', 'stdin', 'stdout',
 'thread_info', 'version', 'version_info', 'warnoptions']
# 不给定模块名,则会返回当前定义的所有参数

 

posted @ 2020-10-23 16:44  lixin2020  阅读(68)  评论(0)    收藏  举报