import module與from module import * 兩種模塊導入有何區別

#原創,轉載請留言聯繫spa

  • 區別1

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

而from module import * 直接使用變量名便可blog

  • 區別2(有點繞)

import module方式操做module的變量時,本地不會建立新變量,操做的是目標模塊的變量!內存

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

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

用一個小示例說明!import

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

而後咱們用import module方式先操做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變量從新分配空間,因此odule文件裏的a變量的值沒有變化!

而import module方式是操做module文件裏面a的變量,即便進行了賦值,從新分配了內存空間,可是他仍是module裏面的變量。因此當別人導入module的時候,module.a的值就是[1,2,3]了!

 

*建議!開發中,若是有操做公共變量的狀況,必定要所有都用import module方式!

相關文章
相關標籤/搜索