Python中传入遗传算法解调用print_function为何仍使用初始参数值
代码疏漏与修复方案
核心问题
- 你没有接收内部函数的返回值:调用
workerOrderArray(solution)、workerOrderDaysarray等函数时,仅执行了函数逻辑,没有把返回的结果赋值给对应变量。后续代码中使用的R1、R2、R3等变量实际读取的是初始定义的全局值,和本次传入的genetic_solution没有关联。 - 全局变量依赖导致的数据污染:你提到内部函数会保存全局变量作为后续输入,只要没有显式更新这些全局变量,就算传入了新的
solution,后续流程也会一直读取初始的全局参数。
修复代码
优先移除全局变量依赖,通过函数返回值传递数据:
def print_function(solution): # 显式接收每个函数的返回值,不再读取全局变量 R1, R2, R3 = workerOrderArray(solution) R1_days, R2_days, R3_days = workerOrderDaysarray(R1, R2, R3) R1_schedule = assignSchedule(R1, R1_days) R2_schedule = assignSchedule(R2, R2_days) R3_schedule = assignSchedule(R3, R3_days) schedules = [R1_schedule, R2_schedule, R3_schedule] for i in schedules: print(i) return
注意事项
如果内部函数逻辑必须依赖全局变量运行,需要在调用函数后显式更新对应的全局变量值,否则新传入的solution无法作用到后续流程。
内容的提问来源于stack exchange,提问作者QUTADAH
相关产品推荐
相关产品推荐

