[問題] 多個function的變數需互通的運用

作者: piligo (霹靂狗)   2021-08-08 22:36:53
請問我有個架構如下,start1底下的fun1~fun3跟start2底下的fun1~fun3
是完全一樣的內容
def start1():
fun1():
fun2():
fun3():
a1='xxx'
a2='xxx'
a3='xxx'
def start2():
fun1():
fun2():
fun3():
fun4():
a1='xxx'
a2='xxx'
a3='xxx'
這樣在維護上會很麻煩,等於修改funX要一次改兩個地方,後來改成這樣測試,
但延伸一個全域變數的問題。因funX都會取用a1~a3變數,改完後勢必要把
a1~a3套global才能餵給funX,因為只是舉例沒列太多,實際上變數有數十個
有看到相關文章說global濫用會造成debug困難,這樣該如何避免funX重複
與global的濫用呢 謝謝
def fun1():
def fun2():
def fun3():
def fun4():
def start1():
fun1()
fun2()
fun3()
global a1
global a2
global a3
a1='xxx'
a2='xxx'
a3='xxx'
def start2():
fun1()
fun2()
fun3()
fun4()
global a1
global a2
global a3
a1='xxx'
a2='xxx'
a3='xxx'
作者: a367560 (欸參陸柒)   2021-08-08 22:44:00
看不懂為什麼重複的要寫兩次,可是感覺可以用class處理?
作者: piligo (霹靂狗)   2021-08-08 22:47:00
我改一下內容 start2其實有多一個fun4()我來查class怎麼用 感謝
作者: aassdd926 (打東東)   2021-08-09 00:24:00
把a1-a4當參數?*a3
作者: piligo (霹靂狗)   2021-08-09 00:54:00
對耶~沒想到可以把a1~a3直接帶入function的參數 來試試
作者: ddavid (謊言接線生)   2021-08-09 14:17:00
如果只是要取用值,喂參數即可,還動用不到classax有持續存取需求,則就應該用class封裝起來
作者: shiyeh (shiyeh)   2021-08-09 20:06:00
a1a2a3 都是定值? 考慮enumerate?
作者: piligo (霹靂狗)   2021-08-10 02:06:00
請問ddavid ax這區實際是有包for 每一輪的ax值都不一樣這樣跟您說的ax有持續存取需求是指同一件事嗎? 看完class的介紹 我的腦袋就當機了 XDshiyeh說到enumerate我有去研究了一下這個函數 是把值多加一個索引沒錯吧 但想不出要運用在哪裡
作者: hydrogencl (荒費青春)   2021-08-11 06:39:00
我也覺得用class 解決
作者: ddavid (謊言接線生)   2021-08-11 11:24:00
如果是因為for迴圈導致的每一輪值不同,其實不建議class用到class,我會覺得情境是某些要持續保存但可變動的狀態值會被多個有關聯性的function存取,所以才用class包但只是迴圈跑一輪的話,那些變數沒有保存的必要,不是應該用class包裝那些迴圈用變數的情境
作者: lycantrope (阿寬)   2021-08-11 14:41:00
function狀態不受環境改變,都可以不用class包

Links booklink

Contact Us: admin [ a t ] ucptt.com