Python import module與from module import * 兩種模塊的區別

區別1

import module 引用共享變量時,要使用module.變量名。

而from module import * 直接使用變量名即可。

區別2

import module方式操作module的變量時,本地不會創建新變量,操作的是目標模塊的變量。

from module import *方式操作module變量時,實質上是在本地創建一個與目標模塊相同的變量名,並且默認與目標模塊變量指向同一個內存空間。

看似功能一樣,但是在開發中稍不注意可能會排bug排到頭皮發麻!

用一個小示例說明:

先建立一個module.py,裏面就一個公共變量,a = []。

然後我們用import module方式先操作module的變量,再打印,看下有沒變化。

import module
module.a = [1,2,3]
print(module.a)

from module import a
print(a)

輸出:
[1, 2, 3]
[1, 2, 3]

看似很平常,正常操作,但是,繼續看!

from module import a
a = [1,2,3]
print(a)

import module
print(module.a)

輸出:
[1, 2, 3]  # 結果不同了!
[]

怎麼調一下位置,就輸出不一樣了?因爲,from module import 方式是自己創建了一個自己的變量a指向module.a的內存空間,當執行命令a = [1,2,3]時,變量a賦值了,重新分配了內存空間,並不是module文件裏的a變量重新分配空間,所以module文件裏的a變量的值沒有變化。而import module方式是操作module文件裏面a的變量,即使進行了賦值,重新分配了內存空間,但是他還是module裏面的變量。所以當別人導入module的時候,module.a的值就是[1,2,3]了。

PS:建議,開發中,如果有操作公共變量的情況,一定要全部都用import module方式。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章