python實(shí)現(xiàn)跨文件全局變量的方法
10多年的姚安網(wǎng)站建設(shè)經(jīng)驗(yàn),針對(duì)設(shè)計(jì)、前端、開發(fā)、售后、文案、推廣等六對(duì)一服務(wù),響應(yīng)快,48小時(shí)及時(shí)工作處理。營(yíng)銷型網(wǎng)站的優(yōu)勢(shì)是能夠根據(jù)用戶設(shè)備顯示端的尺寸不同,自動(dòng)調(diào)整姚安建站的顯示方式,使網(wǎng)站能夠適用不同顯示終端,在瀏覽器中調(diào)整網(wǎng)站的寬度,無論在任何一種瀏覽器上瀏覽網(wǎng)站,都能展現(xiàn)優(yōu)雅布局與設(shè)計(jì),從而大程度地提升瀏覽體驗(yàn)。創(chuàng)新互聯(lián)建站從事“姚安網(wǎng)站設(shè)計(jì)”,“姚安網(wǎng)站推廣”以來,每個(gè)客戶項(xiàng)目都認(rèn)真落實(shí)執(zhí)行。
在使用Python編寫的應(yīng)用的過程中,有時(shí)候會(huì)遇到多個(gè)文件之間傳遞同一個(gè)全局變量的情況。本文就此給出了如下的解決方法供大家參考。
文件1:globalvar.py
#!/usr/bin/env python2.7
class GlobalVar:
db_handle = None
mq_client = None
def set_db_handle(db):
GlobalVar.db_handle = db
def get_db_handle():
return GlobalVar.db_handle
def set_mq_client(mq_cli):
GlobalVar.mq_client = mq_cli
def get_mq_client():
return GlobalVar.mq_client
文件2:set.py
import globalvar as GlobalVar
def set():
GlobalVar.set_mq_client(10)
print "------set mq_client in set.py------mq_client: " + str(GlobalVar.get_mq_client())
文件3:get.py
#!/usr/bin/env python2.7
import globalvar as GlobalVar
def get():
print "------get mq_client in get.py------mq_client: " + str(GlobalVar.get_mq_client())
文件4:main.py
#!/usr/bin/env python2.7
import set
import get
set.set()
get.get()
其中g(shù)lobalvar.py中定義了兩個(gè)全局變量,在set.py中的set函數(shù)中對(duì)其進(jìn)行賦值,在get.py文件中的get函數(shù)取值并打印。main.py函數(shù)作為應(yīng)用入口,調(diào)用set和get。
這樣就可以看到一個(gè)完整的應(yīng)用中,全局變量的跨文件使用。
有什么辦法省略掉那些被調(diào)用函數(shù)的參數(shù)?
也就是func2只想在調(diào)用是傳入一個(gè)c。
那么func2在定義的時(shí)候必須喂飽func1,也就是func2在調(diào)用 func1時(shí),當(dāng)前作用域中要有a,b。
明顯圖中是沒有做到的,沒有實(shí)際ab
b可以試試在這個(gè)文件中直接定義 ab兩個(gè)變量,那么在第三個(gè)文件中引入 func2,就可以直接傳c給func2了,因?yàn)閍b已經(jīng)在上一步被配置好。
這涉及到變量的生命周期問題,一般的,在函數(shù)里面聲明的變量在函數(shù)外是不起作用的。
一個(gè)比較簡(jiǎn)單的解決辦法是你在函數(shù)外就先聲明這個(gè)變量,聲明成全局變量。然后在函數(shù)里面進(jìn)行操作和賦值。
最后就能在函數(shù)外獲取變量的值了。例如:
x?=?0
def?a():
x?=?2
if?__name__?==?'__main__':
a()
print?x
最終x打印出來的結(jié)果就是2
例如一個(gè)函數(shù)內(nèi)有一個(gè)變量i,怎么在函數(shù)外或另一個(gè)函數(shù)中調(diào)用或更改它。新手學(xué)習(xí),謝謝。
==============================
不能在函數(shù)外更改某函數(shù)里的局部變量,因?yàn)槊慨?dāng)你實(shí)例化那個(gè)函數(shù)的時(shí)候,那個(gè)函數(shù)里面的局部變量也會(huì)被重新賦值,重新定義,談何更改呢?
這一個(gè)全部變量和局部變量的問題,如果要實(shí)現(xiàn)樓主說的,必須使用全局變量(類中的self):
================bianliang.py===========
#coding: utf-8
i = 0 #定義一個(gè)全局變量i
def a():
'''
打印出i的值
'''
print i
def b():
global i
a() #調(diào)用a方法
print i #打印i
i = 1000 #重新賦值i
print i #打印i
a() #再次調(diào)用a方法
b()
=================================
%python bianliang.py
1000
1000
這個(gè)py文件里面使用了一個(gè)全局變量i,實(shí)現(xiàn)了a方法和b方法共用參數(shù)i