Python中模組之間變數引用的方法說明

來源:互聯網
上載者:User

在Python中,要想使自己寫的代碼規範、模組化,需要把代碼和功能劃分為不同的module檔案,但是對於有些功能來說,劃分為不同的模組會帶來一定的不方便,比如資料庫的訪問,一般一個應用中對同一個資料庫只會建立一個訪問串連,所以需要在多個模組中共用這個連線物件,那麼該如何應用呢?經過這幾天的學習,終於掌握了其使用的方法。對高手來說也許不算什麼,但是對我這個新手來說,算是一個較大的進步了。

#---------------------------------------------------------

A.py

global CONN_DB

CONN_DB = None

def connDB()

.....  #建立資料庫連接

#---------------------------------------------------------

B.py

imort A

A.connDB()

print A.CONN_DB

#---------------------------------------------------------

C.py

from A import *

connDB()

print CONN_DB

#---------------------------------------------------------

大家可以實驗一下,B和C的結果是截然不同的

下面我說明一下原因

為什麼結果會不一樣??

在B.py打出的結果中,可以看出CONN_DB已經有值了,但是C.py中仍然是None

在於import A  和 from A import *兩種的引用機制不同

import A 是指使用A中所有的屬性和方法(即變數和函數),在B中使用時,一定要A.屬性 A.方法來調用,這時候調用的是A中原有的內容

而from A import *是對A中所有屬性和方法的引用,也就是A中所有屬性和方法的一個備份,對於方法(即函數)可以正常使用,但是對於屬性(即變數)的使用卻有問題,

也就是說在A中的CONN_DB和C中的CONN_DB並不是同一個變數,只是在C開始的時候,把A的CONN_DB賦值給了CONN_DB,但是由於A中並沒有調用connDB函數初始化CONN_DB,所以從A中複製到C的CONN_DB也是None,而C後面調用的connDB中初始化的卻是A中的CONN_DB,所以C中的CONN_DB始終為None

如果想在C中使用CONN_DB的話,可以在A中這麼寫:

#---------------------------------------------------------

A.py

global CONN_DB

CONN_DB = None

def connDB()

.....  #建立資料庫連接

connDB() #調用一下,在別的模組reload本模組時,就已經給CONN_DB賦值了

#---------------------------------------------------------

相關文章

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.