导入模块
# 方式1 # 语法:import 模块 # 本质:使用变量module01存储该模块地址 # 优点:不用担心成员冲突问题 # 使用:需要通过变量访问 import module01 module01.fun01() import module01 as m m.fun01() # 方式2 # 本质:将模块指定成员导入到当前模块作用域中 # from 模块 import 成员 # 使用:直接使用导入的成员 # 缺点:可能造成成员冲突 from module01 import fun01 from module01 import MyClass01 def fun01(): print("demo01--fun01") fun01() c01 = MyClass01() c01.fun02() # 方式3 # from 模块 import * # 优点:可以一次导入多个成员,避免一个一个导入. # 缺点: 代码可读性不高,命名冲突几率更大. from module01 import * # from module02 import * # from module03 import * fun01() c01 = MyClass01() c01.fun02()
模块变量
__all__
""" module5 """ __all__ = ["fun01"] # 定义可以被其他模块导入的成员 def fun01(): print("fun01") # 隐藏成员:使用单下划线命名, # 在其他模块中不使用(因为现在的__all__限定于fun01) # 仅限于from ? import * def _fun02(): print("fun02") def fun03(): print("fun03")
from module05 import * fun01() # 1. 隐藏模块成员 # _fun02()# 不能访问隐藏成员 # fun03()# 不能访问__all__以外的成员 # from module05 import _fun02 # _fun02()# 能访问隐藏成员 # from module05 import fun03 # fun03() # 能访问__all__以外的成员
__doc__ __file__ __name__
# 2. 查看当前模块的文档注释 print(__doc__) # 3. 查看当前模块的文件路径 # /home/tarena/1906/month01/code/day14/demo03.py print(__file__) # 4.查看当前模块名称 --- 判断当前模块是否为主模块 if __name__ == "__main__": print("是主模块(程序从当前模块开始执行)")
模块分类
-
内置模块(builtins),在解析器的内部可以直接使用。
-
标准库模块,安装Python时已安装且可直接使用。
-
第三方模块(通常为开源),需要自己安装。
-
用户自己编写的模块(可以作为其他人的第三方模块)
搜索顺序
搜索内建模块(builtins)
sys.path 提供的路径,通常第一个是程序运行时的路径。
导入包
import 包名 [as 包别名] 需要设置__all__
import 包名.模块名 [as 模块新名]
import 包名.子包名.模块名 [as 模块新名]
from 包名 import 模块名 [as 模块新名]
from 包名.子包名 import 模块名 [as 模块新名]
from 包名.子包名.模块名 import 成员名 [as 属性新名]
# 导入包内的所有子包和模块
from 包名 import *
from 包名.模块名 import *
搜索顺序
sys.path 提供的路径
__init__.py 文件
是包内必须存在的文件
会在包加载时被自动调用
__all__
写在__init__.py文件中
标准库模块
import time # 1. 获取当前时间戳(从1970年1月1日到现在经过的秒数) # 1563326340.661173 print(time.time()) # 2. 获取当前时间元组(年,月,日,小时,分钟,秒,一周的第几天,一年的第几天,夏令时) time_tuple = time.localtime() print(time_tuple) # 3. 时间戳 -->时间元组 print(time.localtime(15633263)) # 4. 时间元组 -- 时间戳 print(time.mktime(time_tuple)) # 5. 时间元组 --> 字符串 print(time.strftime("%y/%m/%d %H:%M:%S",time_tuple)) print(time.strftime("%Y/%m/%d %H:%M:%S",time_tuple)) # 6. 字符串 --> 时间元组 # "19/07/17 09:36:48" print(time.strptime("19/07/17 09:36:48","%y/%m/%d %H:%M:%S"))