zoukankan      html  css  js  c++  java
  • day15

    模块和包

    ● 模块定义:用来从逻辑上组织python代码(变量,函数,类,逻辑:实现一个功能),本质就是.py结尾的python文件(文件名test.py,对应的模块名:test)

    ● 包定义:用来从逻辑上组件模块的,本质就是一个目录(必须带有一个__init__.py文件)

    模块和包导入本质

    ● 导入模块的本质就是把python文件解释一遍

    ● 导入包的本质就是执行该包下的__init__.py文件;如果要导入包下面的模块:需要先导入包,然后包下的__init__.py文件中再导入该包下的模块

    • 模块的四种形式

      1. 自定义模块,common.py就叫做common模块
      2. 第三方模块: 需要自己安装 13万个第三方库 ,无所不能,写库(弄得更简单)
      3. 内置模块: python解释器自带的,不需要安装
      4. 包--> 含有__init__.py的文件夹,一种特殊的模块(解决了一个问题)

      import 与from...import...

      import

      1. 以time模块为例,打开time.py文件
      2. 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
      3. test.py会有一个变量名time指向time模块的名称空间/变量名t指向time模块的名称空间
      #test.py
      
      import time
      
      import time as t  #变量名t指向time模块的名称空间
      
      from time import sleep
      from time import sleep,localtime
      

      from...import...

      1. 以time模块为例,打开time.py文件
      2. 用Python解释器运行解释time.py文件,然后把得到的名字放入一个time模块的名称空间
      3. test.py会有一个变量名sleep指向time模块名称空间中的sleep名字
      # *受__all__=['']
      #test.py
      
      __all__ = ['f1','f2']
      
      def f1():
          print(1)
      def f2():
          print(2)
      def f3():
          print(3)
         
      from test import *
          test.f3()    #无法运行
      
      import test
          test.f3()   # 3
      

      循环导入

      #m1.py
      from m2 import y
      x = 10
      
      #m2.py
      from m1 import x
      y = 20
      

      过程:m1.py --> m2.py --> m1.py ...

      结果:x/y在这个过程中一直没有生成

      解决方案一

      #m1.py
      x = 10
      from m2 import y
      
      
      #m2.py
      y = 20
      from m1 import x
      

      过程:m1.py --> x = 10 --> m2.py --> y = 20 --> m1.py --> x = 10

      结果:x = 10 --> y = 20 --> x = 10

      解决方案二

      #m1.py
      def f1():
          from m2 import y
          print(y)
      x = 10
      
      #m2.py
      def f1():
          from m1 import x
      y = 20 
      

      过程:f1() --> m2.py --> y = 20

      结果:y = 20

      模块的搜索路径

      1. 先从内存中寻找

        from m2 import y
        print(y)
        import time
        time.sleep(10)  # 10s内删除了m2
        
        
        from m2 import y
        print(y)
        
      2. 再从内置中寻找

        from time import time
        print(time)
        
      3. 然后从自定制寻找

        x = 10
        
      4. 最后从环境变量中寻找

        import sys
        print(sys.path)  # 环境变量,模块就是在某个路径中,需要添加路径,在这里找
        sys.path.append(r'D:上海Python11期视频python11期视频day 16')
        
        # del sys.path[1]
        print(sys.path)
        
        import testt
        testt.f1()
        

      Python文件的两种用途

      1. 作为模块文件(m1.py中调用m2.py,运行m1.py时,m2.py即为模板文件),模块可以有多个
      2. 作为执行文件( 当前运行的文件),执行文件只有一个
      3. 执行文件和模块文件是相对的
      # m1.py
      
      x = 10
      if __name__ == '__main__':
          print(x)
          
      #m2.py
      
      import m1
      

      当运行m1.py时,即m1.py作为执行文件,此时 name==== main==,打印x

      当运行m2.py时,即m1.py作为模板文件,此时name==== m1==,if条件不成立,报错

      random模块

      import random
      
      # 大于0且小于1之间的小数
      print(random.random())
      
      0.42866657593385415
      
      # 大于等于1且小于等于3之间的整数
      print(random.randint(1, 3))
      
      3
      
      # 大于等于1且小于3之间的整数
      print(random.randrange(1, 3))
      
      2
      
      # 大于1小于3的小数,如1.927109612082716
      print(random.uniform(1, 3))
      
      2.1789596280319605
      
      # 列表内的任意一个元素,即1或者‘23’或者[4,5]
      print(random.choice([1, '23', [4, 5]]))
      
      [4, 5]
      
      # random.sample([], n),列表元素任意n个元素的组合,示例n=2
      print(random.sample([1, '23', [4, 5]], 2))
      
      ['23', 1]
      
      lis = [1, 3, 5, 7, 9]
      # 打乱l的顺序,相当于"洗牌"
      random.shuffle(lis)
      print(lis)
      
      [9, 1, 5, 7, 3]
      
  • 相关阅读:
    &与&&的区别
    jsp之response方法
    一个数组先按照某个属性的大小排序,如果大小一样的就按照名称排序
    CSS内部div设置上min-height或max-height滚动条就会出现在父元素上
    300行代码手写简单vue.js,彻底弄懂MVVM底层原理
    JavaScript简单手写观察者模式
    javascript中replace还可以这样玩
    VUE中通过改变key去更新局部dom
    element中select的change方法如何传多个参数
    react打包中不想要sourceMap,但是在命令里加'GENERATE_SOURCEMAP=false'后windows下报错'GENERATE_SOURCEMAP' 不是内部或外部命令,也不是可运行的程序 或批处理文件。
  • 原文地址:https://www.cnblogs.com/xwjhyy/p/11591807.html
Copyright © 2011-2022 走看看