zoukankan      html  css  js  c++  java
  • 模块

    模块

    什么是模块?

    模块是一系列功能的结合体,模块本质上是一个个的.py文件

    模块的三种来源

    1.python内置的模块(python解释器的),比如sys/time/os/turtle

    2.第三方的模块(别人写的),比如requests

    3.自定义的模块(自己写的),比如自定义的.py文件

    模块的四种表现形式

    1.使用python编写的py文件

    2.编译后的共享库DLL(动态链接)或者是C或者是C++

    3.包下面带有init.py的一组py文件

    4.python解释器下的py文件

    为什么要使用模块?

    模块可以帮我们更好地管理功能代码,比如:函数

    还可以将项目拆分成一个个的功能,分别存放在不同的py文件中

    如何创建 编写模块 并使用模块?

    鼠标右键创建py文件

    • 在py文件编写python代码

    • 在一个文件中,通过import关键字导入模块
      import 模块名

      注意: import 模块时,模块不能加.py后缀

    • 在使用模块阶段,必须要注意,谁是执行文件,谁是被导入文件(被导入的模块)

    • 模块在首次导入时,就已经固定好了,当前文件查找的顺序是先从内存中查找

      #自定义模块,在py文件中编写代码
      x = 1
      def get():
          print(x)
      def change():
          global x
          x = 0
          print(x)
          
          
      #调用上面自已定义的模块
      import foo #导入模块foo
      a=foo.x #引用模块foo中变量x的值赋值给当前名称空间中的名字a
      foo.get() #调用模块foo的get函数
      foo.change() #调用模块foo中的change函数
      

    模块在导入时发生的事情:

    1、执行源文件代码

    2、产生一个新的名称空间用于存放源文件执行过程中产生的名字

    3、在当前执行文件所在的名称空间中得到一个名字,该名字指向新创建的模块名称空间,若要引用模块名称空间中的名字,需要加上该前缀

    import语句
    • 给模块起别名 as
      import 模块 as 模块的别名

    • 模块的导入方式

      import 模块,在执行文件中直接import导入

      from 包/模块 import 模块/(函数名、变量名、类名)

      #使用import foo导入模块后,引用模块中的名字都需要加上foo.作为前缀,而使用from foo import x,get,change,Foo则可以在当前执行文件中直接引用模块foo中的名字
      
      from foo import x,get,change #将模块foo中的x和get导入到当前名称空间
      a=x #直接使用模块foo中的x赋值给a
      get() #直接执行foo中的get函数
      change() #即便是当前有重名的x,修改的仍然是源文件中的x
      
      #无需加前缀的好处是使得我们的代码更加简洁,坏处则是容易与当前名称空间中的名字冲突,如果当前名称空间存在相同的名字,则后定义的名字会覆盖之前定义的名字。
      
      from foo import * #把foo中所有的名字都导入到当前执行文件的名称空间中,在当前位置直接可以使用这些名字
      

    加上foo.作为前缀就相当于指名道姓地说明要引用foo名称空间中的名字,所以肯定不会与当前执行文件所在名称空间中的名字相冲突,并且若当前执行文件的名称空间中存在x,执行foo.get()或foo.change()操作的都是源文件中的全局变量x。

    PS:第一次导入模块已经将其加载到内存空间了,之后的重复导入会直接引用内存中已存在的模块,不会重复执行文件

    #可以用import语句导入多个模块,即写多行import语句
    import module1
    import module2
        ...
    import moduleN
    #还可以在一行导入,用逗号分隔开不同的模块
    import module1,module2,...,moduleN
    

    model1.py
    from model2 import name
    name = 'jason'

    model2.py
    from model1 import name
    name = 'tank'

    解决循环导入问题:
    1.需要查找的名字放在导入模块的上方
    2.在函数内部导入,将模块变成函数名称空间中的名字

  • 相关阅读:
    RxSwift 核心
    用 @media 控制图片显示大小
    关于媒体查询 @media 的用法
    再次搞懂弹性盒模型
    由淘宝想起,在css无法加载的情况下 依旧可以点击链接调整
    nth-child()和nth-of-type 用法
    如何消除img间的默认间隙
    由淘宝鼠标经过显示头像想起的 定位分析
    水平居中和垂直居中
    position 和 transform【鼠标经过显示一个div滑过】&导航效果应用 以及定位自己的总结
  • 原文地址:https://www.cnblogs.com/a736659557/p/11894010.html
Copyright © 2011-2022 走看看