Python模块的介绍

  • 什么是模块
  • 为什么要用模块
  • 模块的分类和形式
  • 模块的导入方式
  • 导入语句的其他方式
  • 判断文件类型

什么是模块

Python 模块(Module),是一个 Python 文件,以 .py 结尾,包含了 Python 对象定义和Python语句。

模块让你能够有逻辑地组织你的 Python 代码段。

把相关的代码分配到一个模块里能让你的代码更好用,更易懂。

模块能定义函数,类和变量,模块里也能包含可执行的代码。

为什么要用模块

为什么要用模块?
	 站在巨人的肩膀上,别人写好的一些功能我们把它下载下来直接用在我们自己的项目中,大大提高开发效率
      支付宝支付、微信支付、发短信、验证码、等等很多的服务
      # 别人已经开发好了,给它下载下来,直接挪到我们自己的python文件中使用就行了

模块的分类和形式

1. 内置模块(python解释器原来就存在的,在任何位置,任何时间都可以直接使用)
    	eg:time
        
     2. 第三方的(别人写好的模块,人家放在了网上,去网上下载)
     3. 自定义的(我们自己写的模块)
 1. 我们自己写的python代码(.py文件)
		# 一个py文件就是一个模块
        
    2. 包的形式:就是一系列py文件的组合(文件夹)
    	# 文件夹内部有一个__init__.py文件

模块的导入方式之import句式

import md # 导入模块的时候,只写模块名字,不要写后缀名字

"""
    学习模块的时候一定要弄清楚:谁是执行文件,谁是导入文件?
    
    运行当前文件,会导入md文件到此文件中,并且会执行导入文件
    
    导入文件多次,那么,也只会执行一次导入文件中得代码,只需要导入一次即可
    
    
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字md指向导入文件的名称空间
        
"""
# 在执行文件中如何使用导入文件中得数据
# 直接使用模块名字点变量名 直接使用

from … import 语句

Python 的 from 语句让你从模块中导入一个指定的部分到当前命名空间中,语法如下:
from modname import name1[, name2[, ... nameN]]

把一个模块的所有内容全都导入到当前的命名空间也是可行的,只需使用如下声明:
from … import * 语句

"""
from...import...句式
        导入模块也会执行导入文件,多次导入也只会执行一次,跟import句式一样
    
    导入文件的时候发生了什么事儿?
        1. 首先会运行执行文件,产生执行文件的全局名称空间
        2. 运行导入文件md
        3. 会产生导入文件的全局名称空间,把导入文件中的名字都丢到全局名称空间中
        4. 会在执行文件中产生一个名字money指向导入文件的名称空间中得money
        
    如果使用from...import...句式的情况,在执行文件中会出现名字冲突的情况(在执行文件中出现了和导入的名字一样的时候)
        出现冲突的时候离谁近用谁的
    
    以后所有的导入语句都写在文件的开头
"""

导入语句的其他用法

1. 起别名
from md import money as m
from md import read1 as r1
2. 连续导入
	import md
    import time
    import os
    import sys
    
    import md,time,os,sys
3. 通用导入
	from md import *
    from md import *
    read1()
    change()

__all__ = ['money', 'read1', 'change']

循环导入

# 在你编码的过程中,循环导入是不能允许出现的
如果你的代码出现了循环导入问题,那就是你的代码设计不合理,及时更正

判断文件类型(执行文件、导入文件)


if __name__ == '__main__': # md
    read2()

if __name__ == '__main__':
    '''在这个判断里面写的代码,只有是以执行文件运行的时候,才会被执行,当被当成导入文件的时候,不会被运行'''

dir() 函数

内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回:
 import fibo, sys
 dir(fibo)
['__name__', 'fib', 'fib2']
 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']

标准模块

Python 本身带着一些标准的模块库
有些模块直接被构建在解析器里,这些虽然不是一些语言内置的功能,但是他却能很高效的使用,甚至是系统级调用也没问题。

这些组件会根据不同的操作系统进行不同形式的配置,比如 winreg 这个模块就只会提供给 Windows 系统。

应该注意到这有一个特别的模块 sys ,它内置在每一个 Python 解析器中。变量 sys.ps1 和 sys.ps2 定义了主提示符和副提示符所对应的字符串: