[问题] 多个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