python-模块
在python中,模块是代码组织的一种方式。把功能相近的函数或类放到一个文件中,一个文件(.py)就是一个模块(module),模块名就是文件名去掉后缀py。
好处:
- 提高代码的可复用、可维护性。一个模块编写完毕后,可以很方便的在其他项目中导入。
- 解决了命名冲突,不同模块中相同的命名不会冲突。
常用标准库
- builtins 内建函数默认加载
- math 数学库
- random 生成随机数
- time 时间
- datetime 日期和时间
- calendar 日历
- hashlib 加密算法
- copy 拷贝
- functools 常用的工具
- os 操作系统接口
- re 字符串正则匹配
- sys Python自身的运行环境
- multiprocessing 多进程
- threading 多线程
- json 编码和解码JSON对象
- logging 记录日志,调试
导入模块
- import 模块名
- 模块名.变量
- 模块名.函数
- 模块名.类
- from 模块名 import 变量/函数/类
在代码中可以直接使用变量、函数、类
- from 模块名 import *
该模块所有的内容。
但是如果想限制获取的内容,可以在模块中使用__all__=[使用*可以访问到的内容]
- 无论是import还是from的形式,都会讲模块内容进行加载
如果不希望其进行调用,就会用到__name__
在自己的模块里面__name__:__ main __
如果在其他模块中通过导入的方式调用的话,__ name __:模块名
__ init __.py文件
当导入包的时候,默认调用__init__.py文件
作用:
- 当导入包的时候,把一些初始化的函数、变量、类定义在__init__.py文件中
- 此文件中函数、变量等的访问,只需要通过包名、函数…
- 结合__all__=[通过*可以访问的模块]
比较
- from 模块 import *
表示可以使用模块里面的所有内容,如果没有定义__all__所有的都可以访问。
但是如果添加上了__all__,只有__all__=[’’,’’]列表中可以访问
- from 包 import *
表示该包中内容(模块)是不能访问,就需要再__init__.py文件中定义__all__=[可以通过*访问的模块]
循环导入
大型的python项目中,需要很多python文件,由于架构不当,可能会出现模块之间的相互导入
A:模块
def test():
f()
B:模块
def f():
test()
避免产生循环导入:
- 重新架构
- 将导入的语句放到函数里面
- 把导入语句放到模块的最后
其他
当你导入一个模块,Python解析器对模块位置的搜索顺序是:
- 当前目录
- 如果不在当前目录,Python则搜索在shell变量PYTHONPATH下的每个目录
- 如果都找不到,Python会查看默认路径。UNIX下,默认路径一般为/user/local/lib/python/。模块搜索路径存储在system模块的sys.path变量中。变量里包含当前目录、PYTHONPATH和由安装过程决定的默认目录。
单例
class Singleton:
__instance = None
def __new__(cls):
if cls.__instance is None:
return ...
return cls.__instance
重点函数:
time()
sleep()
strftime(‘格式’) ----> %Y,%m,%d