zoukankan      html  css  js  c++  java
  • 环境小硕的转行之路-25-模块的导入与管理

    模块的一些基本概念

    什么是模块? ->别人已经写好的一组功能的集合。
    别人写好的函数,变量,方法放在一个文件里. (这个文件可以被我们直接使用)这个文件就是模块

    import os,re,sys,random#alt点进去可以看到都是py文件但也有dll文件(c语言代码编译成的py代码).所以直接写py文件即可。
    

    如何自己写一个模块?->创建py文件,自己写一个名字,符合变量名命名规则+汉字的文件名,这个名字就是模块名了。

    本文中my_module中的代码

    #__all__ = ['name']
    print('123456')
    name = 'negu'
    def read():
        print('in read in funcread')
    def read1():
        print('in read in funcread',name)
    

      

    模块的导入

    import my_modulemy module下面有波浪线的原因,pycharm认为你模块导入不进来,因为pycharm只识别项目下面的模块。
    #在导入模块的过程中发生了什么?
    #导入一个模块就是执行一个模块.
    #怎么使用my_module模块中的变量
    name = 'negu'
    print(name)#negu 找自己的内存空间
    print(my_module.name)#negu 找my_module的内存空间
    my_module.read()#成功执行
    #模块和当前文件在不同的命名空间中
    #模块在导入的过程中发生了什么?
        #找到这个模块
        #判断这个模块是否已经被导入过
        #如果没有被导入过
            #创建一个属于这个模块的命名空间
            #然后让模块的名字指向这个空间再执行这个模块的代码
            #模块是否可以被重复导入?不可以,不会被执行.
    #怎么判断这个模块已经被导入过了?
    import sys
    print('my_module' in sys.modules)#用这个判断
    my_module.read1()#显示negu 用自己同级命名空间下的name
    
    #导入多个模块
    #给模块起别名,使用这个模块都使用别名去引用变量了.
    import my_module as m
    m.read()
    my_module.read()#报错,第一步让去找my_module的空间,让m指向这个空间.
    def squence(dic,modules = 'json'):#序列化方案的选择
        if modules == 'json':
            import json as aaa
        elif modules == 'pickle'
            import pickle as aaa
            return  aaa.dumps(dic)#导入模块做相同的事的时候用于简化代码
    #导入多个模块
    import os as o,time as t#规范建议,模块应该一个个的导入:自定义模块,第三方模块,内置模块,而不是在一行导入多个.
    #导入顺序:内置,第三方,自定义模块#这样做的原因是为了看我代码的人,可以分辨出自定义模块.
    

      

    from import的用法

    # 如何使用from import?
    # 需要从哪个文件使用某个名字,就把那个名字导入进来.
    from my_module import name #import 了谁只能用谁.
    from my_module import read1
    from my_module import read
     from import 发生了什么?是否执行了整个被导入的文件呢?
    from import 还是会执行模块主程序的程序
    read1()#打印了negu ,read1里面有name 外面就不能用
    read()
    
    #当前文件命名空间和模块名命名空间的问题
    from my_module import read
    from my_module import read1
    def read1():#到此处主程序的read1断开了my_module命名空间里的read1的链接.
        print('main read1')
    read1()#执行主程序的read1,主程序的read1覆盖了模块的read1
    from my_module import read
    read()
    
    '''
    from import 导入的过程中发生了什么事?
        找到要被导入的模块
        判断这个模块是否被导入过
        如果这个模块没被导入过
            创建一个属于这个模块的命名空间,然后执行这个文件.
        找到你要导入的变量,给你要导入的变量创建一个引用指向要导入的变量.(在自己的空间里创建)
    '''
    
    # 如何导入多个名字?
     from my_module import read as r,read1 as r1
     r()
     r1()
     # from my_module import *#在导入过程中内存的引用变化
     from my_module import *#代表把所有东西都导入到主空间进来了,直接用即可。
    
    #* 和__all__的关系
    from my_module import *
    print(name)
    read()
    read1()#报错,*会参考__all__变量,__all__只有name,所以只导入了name.__all__只能约束*
    

      

  • 相关阅读:
    python学习笔记(2)
    数据分析工具pandas
    python学习笔记(1)
    python学习笔记(3)
    python学习笔记(2):科学计算及数据可视化入门
    python学习笔记(1):python基础
    js setTimeout 和 setInterval 区别
    C#根据URL生成签名
    jquery.validate.js客户端验证
    redis学习(一)
  • 原文地址:https://www.cnblogs.com/negu/p/11739870.html
Copyright © 2011-2022 走看看