【知识点】
1、模块
(1)from...import....
# 导入了什么就能使用什么,不导入的变量不能使用;
# 不导入不意味着不存,而是没有建立文件到模块中其他名字的引用;
# 当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字的只代表最后一次对它赋值的那个方法或者变量;
1 from my_module importlogin2 #导入了什么就能使用什么,不导入的变量不能使用
3 #不导入不意味着不存,而是没有建立文件到模块中其他名字的引用
4 deflogin():5 print("in my login")6 #当模块中导入的方法或者变量 和 本文件重名的时候,那么这个名字的只代表最后一次对它赋值的那个方法或者变量
7 login()
(2)from...import...as...(重命名,导入多个)
1 from my_module import login as l,name as n
(3)from...import *
# 导入模块的所有东西都可以使用了
# __all__可以控制*导入的内容
1 __all__ = ['login']2
3 name = 'alex'
4
5 deflogin():6 print('login',name)7
8 importsys9 my_module = sys.modules[__name__]10 getattr(my_module,'login')()
【注意】此时,其他引用该模块时,*能控制只能导出login,其他的通过*不能导入
(4)模块相关的其他知识
# 把模块当成脚本运行:从本模块中反射本模块中的变量
# 模块的搜索路径
# 重新加载模块
# pyc编译文件
① 把模块当成脚本运行:
# 运行一个py文件的两种方式:
A、 以模块的形式运行 import my_module
如果不想模块在导入的情形下执行(比如模块里的print()等内容):在模块里添加如下内容:(脚本运行下都是__name__='__main__')
1 if __name__ == '__main__':2 print('饿了么')3 print(__name__,type(__name__)) #'__main__'/'my_module'
【注意】:
# 在编写py文件的时候,所有不在函数和类中封装的内容都应该写在if __name__=='__main__':之下 (快捷键,打印main按tab)
# 在使用发射自己模块中的内容的时候,应该写以下内容:
1 importsys2 getattr(sys.modules[__name__],'变量名')
B、直接pycharm运行 cmd运行
② pyc编译文件和重新加载模块
重新加载:(开发时不能使用,拿着玩吧)
# 在import之后再修改这个被导入的模块,程序是感知不到的,reload这种方式可以强制程序再重新导入一次
1 importaaa2 importimportlib3
4 importlib.reload(aaa) #表示重新加载
(4)模块的循环引用
在模块的导入中,不要产生循环引用问题
2、包:集合了一组py文件 提供了一组复杂功能的。
# 为什么要有包呢? 当提供的功能比较复杂,一个py文件写不下的时候
# 包里有什么? 包里至少有一个__init__.py
(1)简单的导入:import 包.包.模块——包.包.模块.变量(使用)
from 包.包 import 模块(推荐这种)
(2)导入包 相当于执行了包下面的__init__.py文件(读框架源码的时候)
# 包中模块的绝对导入:
① 在第一级包下面的__init__.py文件里写入要导入的下一级包: from 包 import 包
② 在第二级包下面的__init__.py文件里写入要导入的下一级包或模块:from 包.包 import 包/模块
以此类推往下进行
# 包中模块的相对导入:
① from . import 模块(其中.相当于当前目录,..表示上一层目录) 在包下面的__init__.py文件里写入
② 与上面的绝对导入思想一致,只是用 . 获取相对路径
③ 相对导入只能被模块执行,不能以脚本执行
(3)从包里到处一个模块:获取模块的path,然后添加路径:sys.path.append(path)
(4)从一个包引用另一个包里的模块:
1 importsys2 #获取路径
3 ret=__file__.split('/') #['D:', 'wendang', 'PyCharmCode', 'MyPycharm', 'day24 模块', 'fff', 'bbb', 'main.py']
4 base_path='/'.join(ret[:-2]) #插入‘/’
5 #添加路径
6 sys.path.append(base_path)7 print(base_path)8 #导入模块
9 from xxx importhello10 hello.func()
3、项目开发规范
时间:2020-02-18 01:07:35