Python import 导入模块的时候为什么引用不了子模块?

问题描述

比如导入结巴分词,代码如下:

import jieba # 引入母模块

然后直接使用结巴的子模块 posseg 来标注词性,代码如下:

jieba.posseg.cut('中文词性标注')

这句报异常

AttributeError: 'module' object has no attribute 'posseg'

必须这样导入子模块,才能使用:

from jieba import posseg
posseg.cut('中文词性标注') # 这句正常调用

看到常说推荐直接导入母模块,以防止命名空间污染;而且一般如:

from a import b
b.func('中文词性标注')

这样格式的代码,都能转为这样来使用:

import a
a.b.func('中文词性标注')

但为什么 jieba 结巴分词却不能这样呢?这是什么原因呢?

原因

如果 a 是个目录, b 是个 b.py 文件, func 是 b.py 里的函数, a 目录里有空的 __init__.py

import a # 没问题
import a.b # 没问题,会在这一句找 a/b.py
result = a.b.func() # 正常

重来一遍:

import a # 没问题
result = a.b.func() # 不行, a 下面并没有 b

你可能感兴趣的:(Python,jieba,Python基础)