python模块

1、模块 Module

  什么是模块?
    模块是一个包含有一系列数据,函数,类等组成的程序组
    模块是一个文件,模块文件名通常以.py结尾

  作用:
    让一些相关的数据,函数,类等有逻辑的组织在一起,使逻辑结构更加清晰模块中的数据,函数和类等可提供给其它模块或程序使用
  分类:
    内置模块,在解析器的内部可以直接使用(通常用C语言编写的)
    标准库模块,安装python时已安装且可以直接使用
    第三方模块(通常为开源), 需要自己安装
    下载安装命令:
      $ pip3 install 模块名
    如:
      $ pip3 install tensorflow
      用户自己编写的模块(也可以作为其它人的第三方模块)

2、模块的导入 import 语句
  1、import 语句
    语法:
      import 模块名1 [as 模块新名1], 模块名2 [as 模块新名2]
    作用:
      将某模块整体导入到当前模块中

    用法:
      模块名.属性名
      示例:
      import math
      print(math.factorial(5))
      import time, sys
      import math as m

      dir(obj) 函数返回模块内的所有属性的字符串列表
      help(obj) 函数可以查看模块相关的文档字符串
View Code

  2、from import 语句
    语法:
      from 模块名 import 模块属性名1 [as 属性新名1],
        模块属性名2 [as 属性新名2], ...
    作用:
      将某模块内的一个或多个属性导入到当前模块的作用域

    示例:
      from math import factorial as fac
      from math import sin, cos
      from math import pi
      print(sin(pi/2))
View Code

  3、from import *语句

    语法:
      from 模块名 import *
    作用:
      将某模块的所有属性导入到当前模块

    示例:
      from math import *
      print(sin(pi/2))
      print(factorial(6))
View Code

3、dir 函数:
  dir([obj]) 返回一个字符串列表

  作用:
    如果没有参数调用,则返回当前作用域内的所有变量的列表
    如果给定一个对象作为参数,则返回这个对象的所有变量的列表
    对于一个模块,返回这个模块的全部变量
    对于一个类对象,返回类对象的所有变量,并递归其类对象的所有变量
    对于其它对象返回所有变量、类变量和基类变量

4、自定义模块并导入

  要求:
    模块文件名后缀必须以.py结尾
    模块文件名必须是合法的标识符
    避免名称和内建模块冲突
  导入方式:
    import 语句
    from import 语句
    from import * 语句

  # mymod.py

  '''这是mymod 模块的文档字符串的标题

    这个模块有两个函数的两个数据
    ... 此处省略200行
  '''

  def myfac(n):
    print("正在计算%d的阶乘" % n)

  def mysum(n):
    print("正在计算1+2+3+....+",n, '的和')

  name1 = "Audi"
  name2 = "tesla"

  print("mymod模块被加载!!!")

  print("mymod.__name__ 绑定的是:", __name__)
View Code
  # 此示例示意导入并调用mymod中的模块
  import pdb
  import mymod
  name2 = "bbbbbb" # 在当前模块内创建全局变量
  print('test_mymod.py里的全局变量name2=',name2)

  mymod.myfac(6)
  print(mymod.name1)

  from mymod import mysum

  mysum(100)

  from mymod import *
  print(name2)
View Code

5、import 语句 搜索模块的路径顺序
  1. 搜索内建模块
  2. 搜索程序运行时的路径
  3. sys.path 提供的路径
    sys.path绑定一个列表,列表里是模块的搜索路径
全局变量是模块内全局(全局变量能只在当前模块内有效)

6、模块的加载过程
  在模块导入时,模块的所有语句会执行

  模块被导入和执行的过程
    1. 先搜索相关路径找模块(.py)
    2. 判断是否有此模块对应的.pyc文件 ,如果.pyc文件比.py文件新,则直接加载.pyc
    3. 否则用模块.py文件生成.pyc并加载执行

  模块的编译
    编译        解释执行
    mymod.py ------> mymod.pyc -------> python3

7、模块的属性
  __doc__属性
  用于绑定模块的文档字符串
  __file__ 属性
  用于绑定模块对应的文件名的路径

  __name__ 属性 

  用来记录模块自身的名字

  作用:
    1. 记录模块名
    2. 用来判断是否为主模块
  说明:
    当此模块作为主模块运行时,__name__绑定 '__main__'
    当此模块不是主模块运行时,__name__绑定文件名

  模块的__all__列表
    模块中的__all__列表是一个用来存放可导出属性的字符串列表

  作用:
    限定当用from xxx import *导入时,只导入__all__列表内的

  # 此示例示意模块内的__all__列表的作用和用法


  # __all__列表限定在用from mymod2 import * 时,只导入
  # dowork 和 name1
  __all__ = ['dowork', 'name1']
  def dowork():
    f1()
    f2()


  def f1():
    print("第一步....")


  def f2():
    print("第二步....")


  name1 = 'aaaaaa'
  name2 = 'bbbbbb'
View Code

  模块的隐藏属性
    模块中以 下划线(_) 开头的属性, 在from xxx import *语句
    导入时将不被导入,通常称为隐藏属性

  # 此示例示意模块的隐藏属性
  import copy


  def f1():
    pass


  def _f2():
    pass


  def __f3():
    pass


  name1 = "aaaaa"
  _name2 = 'bbbbb'
View Code
posted @ 2019-03-09 22:18  你厉害。  阅读(186)  评论(0编辑  收藏  举报