面条版代码-->函数版代码-->文件版代码(模块)-->文件夹版(包)
代码会变得更加简洁,清晰,模块化
一个模块里会有多个函数,至关于一个大功能分红多个小功能
1.自定义模块
2.第三方模块,如requests
3.内置模块,如time
4.包(文件夹)app
#test.py import time 1.打开time文件 2.使用python解释器运行time文件,而后把解释文件获得的名字放入time模块的名称空间 3.test.py中会有一个time变量指向time模块的名称空间,若是导入方式为'import time as t', 则就是变量指向time模块的名称空间 from time import sleep 1.打开time文件 2.使用python解释器运行time文件,而后把解释文件获得的名字放入time模块的名称空间 3.test.py中会有一个sleep变量指向time模块名称空间的sleep,若是导入方式为'from time import sleep,local time',则是由一个sleep变量和一个localtime变量指向time模块名称空间中的sleep和localtime
# m1.py from m2 import y x = 10 # m2.py from m1 import x y = 20
为何会有循环导入问题模块化
1.m1文件须要导入m2文件中的y函数
2.m2文件须要导入m1文件的xcode
3.代码自上而下运行,m1须要m2的y,而后会去m2的名称空间找到y,可是在找y以前,须要运行m2的代码,m2的代码第一句是去找m1的x,而后又回去运行m1的代码,m1的第一行代码又是去寻找m2的yblog
4.就是说m1只能运行第一行,m2也只能运行第一行,因此出现了循环导入问题内存
# m1.py def f1(): from m2 import y x = 10 f1() # m2.py def f2(): from m1 import x y = 20 f2()
名字的执行顺序:内置(python解释器启动的时候)-->全局(文件执行的时候)-->局部(函数调用得时候)requests
1.去内存中找it
# test.py import m1 #从m1.py文件中导入的,而后会生成m1模块的名称空间 import time # 删除m1.py文件,m1模块的名称空间仍然存在 time.sleep(10) import m1 #不报错,必定不是从文件中获取了m1模块,而是从内存中获取的
2.去内置模块中找class
# time.py print('from time') #test.py import time #无任何打印,因此他先去内置模块中找了
3.环境变量中找
import sys print(sys.path)
# b/a/m1.py #b/test.py import m1 #报错 sys.path.append('b/a') import m1
1.模块文件,被当作模块给导入,有多个
2.运行文件,被当作执行文件执行,只能有一个
# m1.py def f1(): print('from f1') f1() # test.py import m1 m1.f1() #运行两次
# m1.py def f1(): print('from f1') if __name__ == '__main__': #__name__在m1.py被当作模块导入时是模块名,做为执行文件时是'__main__' f1() # test.py import m1 m1.f1() # 运行一次
直接运用老师的总结,对于后期回顾知识点很是好