python - 在多个文件中使用但在函数调用后未更改的全局变量(Python)
问题描述
我在 settings.py 模块中声明了一个全局变量:
def init():
global grid
grid = [[0,0,0,0,0,0,1,4,3],
[9,0,0,0,0,0,0,0,0],
[0,0,2,0,4,5,0,8,0],
[0,0,0,0,0,3,0,1,0],
[0,6,0,4,9,1,0,5,0],
[0,4,0,6,0,0,0,0,0],
[0,8,0,7,5,0,4,0,0],
[0,0,0,0,0,0,0,0,8],
[2,1,5,0,0,0,0,0,0]]
我还有一个名为 run.py 的模块,其中包含一个应该修改网格的函数:
import numpy
import settings
def solve():
for x in range(9):
for y in range(9):
if settings.grid[x][y] == 0:
for number in range(1,10):
if possible(x,y,number): #function described in this file, not usefull here
settings.grid[x][y] = number
solve()
settings.grid[x][y] = 0
return
print("Solved sudoku in solve():\n{}\n".format(numpy.matrix(settings.grid))) #2nd output
在我的 main.py 中,我首先通过调用 settings.init() 来初始化 settings.grid。之后,我基本上从 settings.py 打印网格变量,然后调用 run.solve() 对其进行修改(它正在工作,因为第二个输出将替换 0),然后重新打印 settings.grid 以查看变量是否相应更改到第二个输出:
import numpy
import settings
import run
settings.init()
print("Inserted sudoku:\n{}\n".format(numpy.matrix(settings.grid)))
run.solve()
print("Solved sudoku:\n{}\n".format(numpy.matrix(settings.grid)))
我的问题是,第三个输出没有像第二个一样采用相同的 settings.grid 值,就像 run.solve() 甚至没有被调用一样!
这是我得到的输出:
1st output
Inserted sudoku:
[[0 0 0 0 0 0 1 4 3]
[9 0 0 0 0 0 0 0 0]
[0 0 2 0 4 5 0 8 0]
[0 0 0 0 0 3 0 1 0]
[0 6 0 4 9 1 0 5 0]
[0 4 0 6 0 0 0 0 0]
[0 8 0 7 5 0 4 0 0]
[0 0 0 0 0 0 0 0 8]
[2 1 5 0 0 0 0 0 0]]
2nd output
Solved sudoku in solve():
[[6 5 8 9 2 7 1 4 3]
[9 3 4 1 6 8 2 7 5]
[1 7 2 3 4 5 9 8 6]
[8 2 9 5 7 3 6 1 4]
[7 6 3 4 9 1 8 5 2]
[5 4 1 6 8 2 3 9 7]
[3 8 6 7 5 9 4 2 1]
[4 9 7 2 1 6 5 3 8]
[2 1 5 8 3 4 7 6 9]]
3rd output
Solved sudoku:
[[0 0 0 0 0 0 1 4 3]
[9 0 0 0 0 0 0 0 0]
[0 0 2 0 4 5 0 8 0]
[0 0 0 0 0 3 0 1 0]
[0 6 0 4 9 1 0 5 0]
[0 4 0 6 0 0 0 0 0]
[0 8 0 7 5 0 4 0 0]
[0 0 0 0 0 0 0 0 8]
[2 1 5 0 0 0 0 0 0]]
你知道我怎样才能像第二个一样获得第三个输出吗?换句话说,您知道在 run.solve() 调用后如何更改我的 main.py 中要更改的 settings.grid 值吗?
提前致谢
解决方案
我尽可能地复制了你的情况,我想我得到了想要的结果。这就是我所做的
设置.py
def init():
global grid
grid = [0, 0]
更新为有一些递归
运行.py
import settings
def solve(i = 1):
if i >= 0:
settings.grid[i] = i + 1
solve(i - 1)
主文件
import settings
import run
settings.init()
print(settings.grid)
run.solve()
print(settings.grid)
新的输出是:
[0, 0]
[1, 2]
>>>
注意:在递归调用之后的代码中,您将位置设置回0
,这可能不是您的问题,但我认为您必须检查一下。
settings.grid[x][y] = number
solve()
settings.grid[x][y] = 0 # <==== Right here
推荐阅读
- c# - Unity 3D 将乐谱显示脚本附加到预制件
- java - Android - 保持服务运行
- variables - 通过 ssh 回显多行变量内容
- c++ - 将具有边权重的多重图简化为具有最小边权重的简单图
- c++ - 创建头文件并使用 FastLED 库中的 CRGB LED 阵列时出错
- javascript - 引导程序中的 Highcharts 导航按钮和全屏按钮
- shiny - 在 R 中使用 Highcharter 创建柱形图
- swift - 如何跟踪文件的变化?macOS 开发/快速
- protractor - 量角器浏览器从 multiCapabilities 中选择
- python - 在 Python 中安装 java 包时出错