预计阅读时间——5分钟
Python的好处在于,你不需要懂很多概念,你就有机会投入工作,同样,问题也有机会随时发生。
包、模块
foo --bar.py --sim.py --__init___.py
简单来讲,包就是一个目录,而模块对应一个文件,包可以包含子包:
foo --subf --test.py --testb.py --__init__.py --bar.py --sim.py --__init__.py
包的导入
假设我们在这些包中定义了一些简单的函数。
bar.py
# encoding: utf-8# bar.pydef add(p1, p2): return p1+p2
foo/subf/testb.py
# encoding: utf-8# testb.pydef sub(p1, p2): return p1-p2
同时所有的_init_.py文件内容都是空。
当完成一个包的定义时,我们可以在其他代码块中引用这些包。
from foo import bar# 或者import foo.bar# 或者from foo.bar import add# 这种方式不推荐,会降低代码可读性,增加维护成本from foo.bar import *
导入有一个前提,是foo包要在包所有路径内,这里就不再提这块了,可以参考本文引用。
包相对导入
如果当前模块是test.py,那么它可以这样使用相对导入使用其他模块的功能:
from .testb import subfrom ..bar import add
隐式代码执行
当第一次引用其他模块时,会执行该模块全局范围的语句,sim.py定义如下:
# encoding: utf-8# sim.pyprint('This is a sample')class A: print('This is a sample in Class') def __init__(self): print('This is a sample in class method')
当该模块第一次被引用时,可以看到输出:
This is a sampleThis is a sample in Class
引用
- https://stackoverflow.com/questions/448271/what-is-init-py-forstackoverflow.com
- https://docs.python.org/zh-cn/3/reference/import.htmldocs.python.org
- https://docs.python.org/zh-cn/3/tutorial/modules.htmldocs.python.org