zoukankan      html  css  js  c++  java
  • 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
  • 相关阅读:
    SpringMVC 集成 Swagger【问题】 No qualifying bean of type RequestMappingHandlerMapping found for dependency
    【leetcode】medianofTwoSortedArrays
    记一次apache+php调优
    java 文件定位
    Java知识探究一:关于IO类库
    180app待选内容
    SQlserver 2000 根据spid 查询执行的SQL
    (转)Flashbuilder4.5中文版破解方法
    代码整洁之道
    手机分辨率基础知识(DPI,DIP计算)
  • 原文地址:https://www.cnblogs.com/zhaoyang1997/p/10503405.html
Copyright © 2011-2022 走看看