python 导入包的路径_Python:包、模块和导入

a12e0edf890a90cc6d10fba4cf41773a.png

南京著名风景区——牛首山

预计阅读时间——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
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值