目录
1、模块:
如果想实现与时间有关的功能,就需要调用系统的time模块。如果想实现与文件和文件夹有关的操作,就需要要用到os模块。再例如我们通过Selenium实现的Web自动化测试,那么Selenium对于Python来说就是一个第三方扩展模块。
每一个 Python 脚本文件都可以被当成是一个模块。模块以磁盘文件的形式存在。当一个模块变得过大,并且驱动了太多功能的话,就应该考虑拆一些代码出来另外建一个模块。模块里的代码可以是一段直接执行的脚本,也可以是一堆类似库函数的代码,从而可以被别的模块导 入(import)调用。模块可以包含直接运行的代码块、类定义、 函数定义或这几者的组合。 推荐所有的模块在Python模块的开头部分导入。而且最好按照这样的顺序:Python标准库模块、Python第三方模块、应用程序自定义模块、
import:
在Python中用关键字import来引入某个模块,比如要导入模块time,就可以在文件最开始的地方用import time来引入:
语法:
import module1
import module2[ ......
import moduleN
或者
import module1[, module2[,... moduleN]]
在调用模块中的函数时,必须加上模块名调用,因为可能存在多个模块中含有相同名称的函数,此时,如果只是通过函数名来调用,解释器无法知道到底要调用哪个函数。为了避免这样的情况,调用函数时,必须加上模块名. 模块名.函数名
- import time ;print(time.sleep(2));
- from modname import name1[, name2[, ... nameN]]; from time import sleep
- 导入一个模块的所有内容也可以使用from…import*。
- import pandas as pd #使用as重新命名
2.模块制作:
#当前目录的调用方式
# from module import count (module是文件夹名字,count是模块文件的名字)
# import count
#跨目录调用方式
# from aa import count
#当项目复杂之后,调用
#以下这种会报错,
import sys
#.\\a表示的是我们的当前目录的下一层目录;.\\表示当前目录;..\\表示上衣目录;使用绝对路径D:\python\AI-04-预科Python\module\aa
sys.path.append('.\\aa')
print(sys.path)
from aa import new_count
#相当于导入以下内容
3.包
包是一种管理 Python 模块命名空间的形式,采用"点模块名称"。比如一个模块的名称是 A.B, 那么他表示一个包 A中的子模块B。
目录中只有包含一个叫做__init__.py的文件才会被认作是一个包。
在导入包的时候,Python会从sys.path中的目录来寻找这个包中包含的子目录
目录中只有包含了叫做__init__.py的文件,才能被程序认作是包,模块才能被导入成功。现在我们就在msg文件夹下创建一个__init__.py文件,并且在文件中写入__all__。
__init__.py 控制着包的导入行为。如果__init__.py文件为空的话,仅仅是把这个包导入,不会导入包中的模块。__init__.py中的__all__变量,是用来控制from包名import * 时导入的模块。
可以在__init__.py中编写其他内容,在导入时,这些编写的内容就会被执行。可以在__init__.py中向sys.path添加当前被调用模块路径。
__all__总结:
编写Python代码(不建议在__init__中写python模块,可以在包中在创建另外的模块来写,尽量保证__init__.py简单)
模块中不使用__all__属性,则导入模块内的所有公有属性,方法和类 。 模块中使用__all__属性,则表示只导入__all__中指定的属性,因此,使用__all__可以隐藏不想被import的默认值。 __all__变量是一个由string元素组成的列表。 它定义了当我们使用 from <module> import * 导入某个模块的时候能导出的符号(这里代表变量,函数,类等)。包中使用__all__属性,在包的__init__.py中意为导出包里的模块
from <module> import * 默认的行为是从给定的命名空间导出所有的符号(当然下划线开头的变量,方法和类除外)。 需要注意的是 __all__ 只影响到了 from <module> import * 这种导入方式, 对于 from <module> import <member> 导入方式并没有影响,仍然可以从外部导入。