Python 如何将网格作为函数返回?

Python 如何将网格作为函数返回?,python,Python,所以我有一个任务,我必须使用一个测试代码来检查我的代码是否工作,我试图做的是定义一个网格作为一个函数,并返回它,以便测试代码可以使用它 测试代码: def run_test (test): if test == 0: grid = [] print(grid) util.create_grid (grid) # import from a different file print (len (grid

所以我有一个任务,我必须使用一个测试代码来检查我的代码是否工作,我试图做的是定义一个网格作为一个函数,并返回它,以便测试代码可以使用它

测试代码:

def run_test (test):
    if test == 0:
        grid = [] 
        print(grid)   
        util.create_grid (grid)
        # import from a different file
        print (len (grid))
        print (len (grid[0]))
        print (len (grid[1]))
        print (len (grid[2]))
        print (len (grid[3]))
        print (grid[0][0])
        print (grid[1][2])
        print (grid[2][1])
        print (grid[3][3])
我的代码(来自其他文件):

我得到的错误是: 打印(len(网格[0]))
索引器:列表索引超出范围

问题是您忽略了
创建网格的返回值

grid = util.create_grid(grid)
由于在重新指定网格之前从未使用过
网格
,因此将任何对象作为参数传递会更简单(函数会忽略它):


问题是您忽略了
create\u grid
的返回值:

grid = util.create_grid(grid)
由于在重新指定网格之前从未使用过
网格
,因此将任何对象作为参数传递会更简单(函数会忽略它):


如果所有文件都在您的控制下,并且您可以修改它们,我会看到两个问题:

  • 此方法中的参数
    grid
    从未使用过。它应该被移除

    def create_grid(grid):  
        grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
        return grid
    
  • 永远不会使用返回值。应该是

     grid = util.create_grid()
    
  • 如果由于无法控制而无法修改
    test\u run()
    ,则需要找到一种无需赋值即可修改数组的方法

    在这种情况下,从

    grid.clear()
    
    以确保数组为空。之后,使用

    grid.append()
    


    如果所有文件都在您的控制下,并且您可以修改它们,我会看到两个问题:

  • 此方法中的参数
    grid
    从未使用过。它应该被移除

    def create_grid(grid):  
        grid = [[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0,0]]
        return grid
    
  • 永远不会使用返回值。应该是

     grid = util.create_grid()
    
  • 如果由于无法控制而无法修改
    test\u run()
    ,则需要找到一种无需赋值即可修改数组的方法

    在这种情况下,从

    grid.clear()
    
    以确保数组为空。之后,使用

    grid.append()
    

    create_grid()
    函数中,
    grid
    变量仅在函数的范围内,因此它将仅在函数中编辑参数

    例如:

    >>网格=[]
    >>>def创建网格(网格):
    ...     网格=[1,2,3]
    ...
    >>>创建网格(网格)
    >>>打印(网格)
    []
    
    在这里您可以看到您的
    网格
    变量没有改变

    您应该做的是在更改后返回网格(您已经这样做了),并在
    run\u test()
    函数中将
    grid
    变量定义为函数的返回值,如下所示:

    >>网格=[]
    >>>def创建网格(网格):
    ...     网格=[1,2,3]
    ...     回流栅
    ...
    >>>网格=创建网格(网格)
    >>>打印(网格)
    [1, 2, 3]
    
    在这里,您的
    网格
    变量发生了变化

    请注意,在函数中重新定义网格时,不需要将网格作为参数传递

    因此,您的代码应该如下所示:

    def create_grid():
    网格=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0]]
    回流栅
    
    grid=util.create_grid()
    
    如果您想了解有关作用域的更多信息,请参阅。

    create_grid()
    函数中,
    grid
    变量仅在函数的作用域中,因此它将仅在函数中编辑参数

    例如:

    >>网格=[]
    >>>def创建网格(网格):
    ...     网格=[1,2,3]
    ...
    >>>创建网格(网格)
    >>>打印(网格)
    []
    
    在这里您可以看到您的
    网格
    变量没有改变

    您应该做的是在更改后返回网格(您已经这样做了),并在
    run\u test()
    函数中将
    grid
    变量定义为函数的返回值,如下所示:

    >>网格=[]
    >>>def创建网格(网格):
    ...     网格=[1,2,3]
    ...     回流栅
    ...
    >>>网格=创建网格(网格)
    >>>打印(网格)
    [1, 2, 3]
    
    在这里,您的
    网格
    变量发生了变化

    请注意,在函数中重新定义网格时,不需要将网格作为参数传递

    因此,您的代码应该如下所示:

    def create_grid():
    网格=[[0,0,0,0],[0,0,0,0],[0,0,0,0],[0,0,0]]
    回流栅
    
    grid=util.create_grid()
    

    如果您想了解有关作用域的更多信息,请参阅。

    编辑问题以解释发生的情况。如果有错误消息,请在问题中将其显示为格式正确的文本。
    create\u grid
    是否始终忽略其参数?(1)将来您应包括错误的完整回溯并正确设置格式。(2) 但在这种情况下,错误很简单:测试函数希望您在创建和返回新对象时修改作为函数参数提供的列表对象(“extend”方法在这里会有所帮助)。编辑问题以解释发生了什么。如果有错误消息,请在问题中将其显示为格式正确的文本。
    create\u grid
    是否始终忽略其参数?(1)将来您应包括错误的完整回溯并正确设置格式。(2) 但在这种情况下,错误很简单:测试函数要求您在创建和返回新对象时修改作为函数参数提供的列表对象(“extend”方法在这里会有所帮助)。我猜海报不允许修改测试函数。@MichaelButscher:的确,可能是这样的。谢谢你的邀请hint@MichaelButscher:OP回来后会改变他的观点,我们拭目以待。我想海报是不允许修改测试函数的。@MichaelButscher:事实上,可能是这样的。谢谢你的邀请hint@MichaelButscher当前位置OP回来并改变其观点时,我们将拭目以待。我猜海报不允许修改测试功能。我猜海报不允许修改测试功能。我猜海报不允许修改测试功能。因为答案已被接受,我的猜测显然是错的。我猜海报不允许修改测试函数。由于答案被接受,我的猜测显然是错误的。