Python随记(19)模块 包 搜索路径

模块

模块就是一种高级的封装。

  • 容器(列表 元组 字符串 字典等)是对数据的封装
  • 函数 是对语句的封装
  • 类,是对方法和属性的封装,也就是对函数和数据的封装

模块,就是程序,每一个以 .py 结尾的文件都是一个模块
导入模块三种方法:1. import 模块名 2. from 模块名 import 函数名(from 模块 import * 导入模块中所有函数,下划线开头的私有属性不会导入,但是容易导致名字错乱) 3. import 模块名 as 新名字

_name_ = '__main__‘

人家的代码很多都有 if___name__ == '__main__'这个就是用来测试用的。
当你写完代码,肯定要测试的,当代码作为模块被导入时,肯定不能让测试的代码起作用,通过__name__属性我们就可以让python知道该模块时作为程序运行还是导入其他文件中。
当作为程序运行时,__name_属性的值就是__main_,而作为模块导入的时候,这个值就是给模块的名字了。

def hi():
    print('hello world')
def test():
    hi()
    print('test')
    print(__name__)
if __name__ == '__main__':
	test()
>>>
hello world   #这是作为程序执行的
test
__main__

import hello   #作为模块导入__name__的值就改变成模块的名字了
hello.hi()
>>>hello world
hello.test()
>>>
hello world
test
hello

搜索路径

模块的导入需要一个路径搜索的过程,例如导入hello模块,就现在定义好的路径下找,如果没找到就失败。这个路径就是一组目录,可以通过sys 模块的path变量表示

>>> import sys
>>> sys.path
['', 'D:\\python\\Lib\\idlelib', 'D:\\python\\python38.zip', 'D:\\python\\DLLs', 'D:\\python\\lib', 'D:\\python', 'D:\\python\\lib\\site-packages']

sys.path.append('E:\\code')  #这就可以增加搜索目录了

对于大型系统又很多模块的,将模块分门别类的放在不同的文件夹中,这就是包了。
创建包只要在文件夹中创建一个 __init__.py的模块文件,内容可以是空的,也可以写一些初始化代码,用来告诉python这个目录是个包。。。from sound.effects import echo从包中调用模块或函数也是一样的。
如果我们使用 from sound.effects import *会发生什么?Python 会进入文件系统,找到这个包里面所有的子模块,一个一个的把它们都导入进来。
但是很不幸,这个方法在 Windows平台上工作的就不是非常好,因为Windows是一个大小写不区分的系统。在这类平台上,没有人敢担保一个叫做 ECHO.py 的文件导入为模块 echo 还是 Echo 甚至 ECHO。如果包定义文件 init.py 存在一个叫做 _all_ 的列表变量,那么在使用 from package import * 的时候就把这个列表中的所有名字作为包内容导入。

像极客一样思考
遇到不了解的模块,首先就要找官方文档,打开IDLE,Help - Python Doce(F1) 使用文档的搜索功能。
也可以用__doc__查看属性,查看这个模块的简介。dir()函数可以查询到模块定义了那些变量,那些类。有些里面又__all__这个属性,可以帮助我们过滤不用的东西。
__file__属性,指明了模块源代码的位置timeit.__file__,还有help函数帮助我们。
内置的函数 dir() 可以找到模块内定义的所有名称。以一个字符串列表的形式返回,如果没有给定参数,那么 dir() 函数会罗列出当前定义的所有名称:

(基础复习结束,,,,,爬虫我来了,,,)

发布了25 篇原创文章 · 获赞 0 · 访问量 295

猜你喜欢

转载自blog.csdn.net/weixin_46192930/article/details/105064572