1. 程式人生 > >Python import 匯入模組的時候為什麼引用不了子模組?

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