Python Day 18 常用模块 (模块和包)
模块
#什么是模块?
#如何使用?
#import py文件 就是执行这个py文件
#如何在当前文件中执行导入模块中的函数或变量
# 导入的模块名.函数名
# 导入的模块名.变量
#模块是否可以被多次导入吗?
#不可以,只有一次生效
# 发生了什么?
#import mymodules
#检测模块名字是否存在,如果有就不继续导入
#print(sys.modules.get('mymodules'))
#如果没有,创建一个属于这个模块的命名空间。
#执行这个模块中的代码,将模块中的名字存储在这个模块的命名空间中
import sys print(sys.modules.get('mytemp')) import mytemp import mytemp import mytemp print(sys.modules) print(sys.modules.get('mytemp'))
#为什么pycharm报错的代码还能执行
#对于自定义模块,pycharm只认项目根目录中的,会报错
#如何处理?
# 可以设置当前目录为项目根目录。
#python解释器会从当前目录,和lib根目录进行查找
#pycharm会将项目目录加入环境变量中
#print(sys.path) #查看环境变量 import sys print(sys.path) path = 'D:LearnPython全栈开发Day17' sys.path.append(path) #修改环境变量列表,控制哪些路径下的模块可以被顺利导入 print(sys.path)
#项目开发规范#
导入模块的方法
import xx
import xx as 别名
from xxx import xxx as xxxx
from xxx import xxx as xx,xxxxxx as xx
import time,os,sys #可以一行导入多个,不推荐使用
from xxx import *
此方法可以直接用,但是发送命名冲突,几率低,主要会降低可读性引起歧义
对应导入文件中设置 __ALL__ = ['变量','函数名'],此方法只约束*,可以直接导入其他的
要执行整个要导入的文件,导入了全局
会不会和全局的变量发生冲突?
from import导入的变量会发生冲突
如果导入的是price ,my_moudel是否能用?
不能用
func1是否还能用?
不能用
导入调用price 的func1 price能否直接用?
func1可以调用price,不能直接用。
导入模块的顺序
一次性将需要的都写入开头
先写内置模块,扩展模块,自定义模块
模块的查找顺序是:内存中已经加载的模块->内置模块->sys.path路径中包含的模块
import os import time import django import mymoudles
模块直接不能循环引用,一般会发生找不到模块报错
编译文件pyc文件问题
import time
#在导入一个模块的时候会产生一个模块的字节码pyc文件
#如果首次导入模块,会自动生成,会认为是一个通用的功能,
#将通用的功能进行编译,节省启动时间
#pyc文件会加快程序的启动效率,不会影响执行效率。
#如果py文件更改了,pyc文件会感知吗?
#可以,会重新编译