环境小硕的转行之路-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-模块的导入与管理的主要内容,如果未能解决你的问题,请参考以下文章