作者piligo (霹靂狗)
看板Python
標題[問題] 多個function的變數需互通的運用
時間Sun Aug 8 22:36:53 2021
請問我有個架構如下,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'
--
※ 發信站: 批踢踢實業坊(ptt.cc), 來自: 106.104.34.155 (臺灣)
※ 文章網址: https://webptt.com/m.aspx?n=bbs/Python/M.1628433415.A.DD9.html
1F:推 a367560: 看不懂為什麼重複的要寫兩次,可是感覺可以用class處理? 08/08 22:44
2F:→ piligo: 我改一下內容 start2其實有多一個fun4() 08/08 22:47
※ 編輯: piligo (106.104.34.155 臺灣), 08/08/2021 22:47:47
3F:→ piligo: 我來查class怎麼用 感謝 08/08 23:55
4F:→ aassdd926: 把a1-a4當參數? 08/09 00:24
5F:→ aassdd926: *a3 08/09 00:25
6F:→ piligo: 對耶~沒想到可以把a1~a3直接帶入function的參數 來試試 08/09 00:54
7F:推 ddavid: 如果只是要取用值,喂參數即可,還動用不到class 08/09 14:17
8F:→ ddavid: ax有持續存取需求,則就應該用class封裝起來 08/09 14:18
9F:推 shiyeh: a1a2a3 都是定值? 考慮enumerate? 08/09 20:06
10F:→ piligo: 請問ddavid ax這區實際是有包for 每一輪的ax值都不一樣 08/10 02:06
11F:→ piligo: 這樣跟您說的ax有持續存取需求是指同一件事嗎? 看完class 08/10 02:07
12F:→ piligo: 的介紹 我的腦袋就當機了 XD 08/10 02:07
13F:→ piligo: shiyeh說到enumerate我有去研究了一下這個函數 是把值多加 08/10 02:14
14F:→ piligo: 一個索引沒錯吧 但想不出要運用在哪裡 08/10 02:15
15F:推 hydrogencl: 我也覺得用class 解決 08/11 06:39
16F:推 ddavid: 如果是因為for迴圈導致的每一輪值不同,其實不建議class 08/11 11:24
17F:→ ddavid: 用到class,我會覺得情境是某些要持續保存但可變動的狀態 08/11 11:25
18F:→ ddavid: 值會被多個有關聯性的function存取,所以才用class包 08/11 11:25
19F:→ ddavid: 但只是迴圈跑一輪的話,那些變數沒有保存的必要,不是應該 08/11 11:26
20F:→ ddavid: 用class包裝那些迴圈用變數的情境 08/11 11:26
21F:推 lycantrope: function狀態不受環境改變,都可以不用class包 08/11 14:41