环境小硕的转行之路-25-模块的导入与管理

Posted negu

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了环境小硕的转行之路-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__只能约束*

  

以上是关于环境小硕的转行之路-25-模块的导入与管理的主要内容,如果未能解决你的问题,请参考以下文章

环境小硕的转行之路-23-异常处理

环境小硕的转化之路-17-内置函数拾遗

Python全栈之路----常用模块----包及跨模块导入

python之路---25 模块和包

25岁转行测试之路:破局35岁魔咒,一把鼻涕一把泪,如今终于熬出了头

开坑,Unix环境高级编程,转行之路又得缓缓了