模块一共三种:python标准库、第三方模块、应用程序自定义模块。
相同名字的函数和变量完全可以分别存在不同的模块中,因此,我们自己在编写模块时,不必考虑名字会与其他模块冲突。但是也要注意,尽量不要与内置函数名字冲突。
模块导入执行两件事:
(1)引入变量名(2)执行该文件
基本导入用法:
1:import module1[, module2[,... moduleN]
2:import logging as log #用别名
3:from modname import function
4:from filename import module
#__name__的作用:在执行文件中为__main__,在被调用包中为所在文件名
#注意不要直接在功能文件包中直接写执行语句。可以写在__name__判断下
print(__name__) # 输出__main__
作用:1.用于被调用文件测试
2.用于防止外部调用主函数,可仅在bin文件中调用main函数执行程序
if __name__=="__main__":
print(__name__) # __main__
main.run()
# 导入包在同级目录可直接
import module
或者
import module as 别名
#from module import * # 不推荐,容易函数重名导致覆盖和占用内存
##不在同一级目录则会按照sys.path中路径查找,首先查找当前执行文件所在路径
import sys
print(sys.path)
# ['F:\\老男孩全栈3课件\\day21\\day21\\day21_lesson',
# 'F:\\老男孩全栈3课件\\day21',
# 'F:\\python_virtual\\Scripts\\python36.zip',
# 'F:\\python_virtual\\DLLs',
# 'F:\\python_virtual\\lib',
# 'F:\\python_virtual\\Scripts',
# 'D:\\Anaconda3\\Lib',
# 'D:\\Anaconda3\\DLLs',
# 'F:\\python_virtual',
# 'F:\\python_virtual\\lib\\site-packages',
# 'D:\\Anaconda3', 'D:\\Anaconda3\\lib\\site-packages',
# 'D:\\Anaconda3\\lib\\site-packages\\setuptools-28.8.0-py3.6.egg',
# 'D:\\Anaconda3\\lib\\site-packages\\pip-9.0.1-py3.6.egg', '
# D:\\Anaconda3\\lib\\site-packages\\win32',
# 'D:\\Anaconda3\\lib\\site-packages\\win32\\lib',
# 'D:\\Anaconda3\\lib\\site-packages\\Pythonwin',
# 'C:\\JetBrains\\PyCharm # #
# 2017.3.2\\helpers\\pycharm_matplotlib_backend']
# 只能from 当前可找到路径.下一级路径.下一级路径 import 包
# import 最后只能导入包不能导入文件
#任何被调用文件总是从执行文件路径开始查找,而非它们各自的文件路径
添加基路径的方法
# 方便查找定义在祖父级下的包
import os
import sys
BASE_DIR = os.path.dirname(os.path.dirname(os.path.abspath(os.path.abspath)))
print(BASE_DIR)
sys.path.append(BASE_DIR)
# os.path.dirname 作用:查找当前文件路径
#os.path.abspath 作用:查找当前文件绝对路径
#__file__ 作用:查看当前执行文件路径
合起来可以起到查看上两级文件路径,对一般项目建立三级文件结构来说足够用了。