| 
                        【新品产上线啦】51CTO播客,随时随地,碎片化学习
                
有同学问题关于模块与包的问题,特给新人总结的关于Python包与模块的10个知识清单。 
0、一个模块(module)就是一个py文件,模块的名字就是该文件的名字(不包含后缀) 
1、一个 包(package)就是一个文件夹,(Python2规定该文件夹必须包含一个 __init__.py,Python3没有要求),包名就是文件夹名。 
2、按 import 进来的对象不同分为4种场景: 
- 1. import <package>  # 导入一个包 
 - 2. import <module>   # 导入一个模块 
 - 3. from <package> import <module or subpackage or object>  # 从一个包中导入模块/子包/对象 
 - 4. from <module> import <object>  # 从模块中导入对象 
 
  
3、解释器会按照sys.path列表的顺序来查找被引入的包或模块名字。 
- >>> import sys 
 - >>> import pprint 
 - >>> pprint.pprint(sys.path) 
 - ['', 
 -  'C:PythonPython35-32python35.zip', 
 -  'C:PythonPython35-32DLLs', 
 -  'C:PythonPython35-32lib', 
 -  'C:PythonPython35-32', 
 -  'C:PythonPython35-32libsite-packages'] 
 
  
优先加载当前工作目录下的模块,如果你的项目中使用了与内建模块中同名的包或模块名,就会遇到没有xx属性之类的报错提示,新手特喜欢干这种事。 
4、你可以操作 sys.path,使得其他路径文件加入到Path中,使之能被解释器发现。 
- # test.py 
 - import sys, os 
 -  
 - # 当前目录没有hi模块,报错找不到模块 
 - import hi  
 - Traceback (most recent call last): 
 - ImportError: No module named hi 
 -  
 - # hi模块所在位置: /data/hi.py 
 - # 将hi所在模块加入sys.path 
 - sys.path.append("/data") 
 -  
 - # 可以正常工作了 
 - import hi 
 
  
5、另外一种加载模块的方法:如果你的模块不在 sys.path,除了第5条方法在外,还可以使用 imp 模块中的方法 imp.load_source 
- import imp 
 -  
 - imp.load_source("hi", "C://data/hi.py") 
 - import hi 
 -  
 - # 可以自己指定模块的名字,相当与 import hi as h2 
 - imp.load_source("h2", "C://data/hi.py") 
 - import h2 
 
  
6、import module 时,模块中所有的代码将被执行(类对象,函数对象将被创建,不会被调用),import package 时, init .py 文件中的代码也将被执行。 7、模块的 __file__ 属性 
导入模块时,可以通过模块的 __file__ 属性查看模块所在磁盘的路径位置 
- >>> import requests 
 - >>> requests.__file__ 
 - 'D:ProgramsAnaconda3envspy_testlibsite-packagesrequests__init__.py' 
 
  
8、永远不要使用 from import * ,有不可预知的风险 
9、没有了。 【编辑推荐】 - 近两万名开发者维护的 Linux 内核代码行数已超 2500 万
 - 第四范式发布全新AI平台工具 让业务人员也可以开发AI应用
 - Google推出移动开发工具Flutter预览版2 稳定版1.0就要到来
 - 2018 年关于前端开发的五大发展趋势
 - 红帽喊话开发者:我们将支持 OpenJDK 8 到2023年
  【责任编辑:张燕妮 TEL:(010)68476606】 
            点赞 0                        (编辑:52站长网) 
【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! 
                     |