功能的结果 - Python

时间:2014-05-02 22:36:40

标签: python arrays list function python-3.x

我正在创建一个实用程序,其功能将用作另一个程序的一部分。

这是我的功能(编辑):

def push_up (grid):
   new_grid = up_down_swapper(grid)


   new_grid = zero_DR(new_grid) 

   for i in range(4):
     for j in range(3):                
        if new_grid[i][j] == new_grid[i][j+1]:
            new_grid[i][j+1] = (new_grid[i][j])+(new_grid[i][j])
            new_grid[i][j] = 0
        else: 
            pass

new_grid = zero_DR(new_grid)

grid = up_down_swapper(new_grid)
#print(grid) - shows the grid as the expected outcome. But outside of the function it  doesn't change

以下是它的使用方法:

push.push_up (grid)

正如你们所知,它并没有被赋予像

这样的价值
new_grid = push.push_up (grid)

我无法更改主程序(这是一项任务,这是我被告知要做的事情。)

我的问题是如何让函数更改参数的值?我不确定我是否有意义但是这样的事情:

def square(x):
    x = x*x

value = 3 
square(value) 
print(value)

这将输出3,但我想要9.我将如何做到这一点?

这是主代码的pastebin: http://pastebin.com/NAxWL14h

2 个答案:

答案 0 :(得分:1)

简短的回答是,由于Python传递参数的方式,你不能这样做。对于square示例,如果不将value的结果分配给square(value),则无法更改grid的值。

但是,您无需更改for i in range(4): #add numbers that are equal for j in range(3,-1,-1): if grid[i][j] == grid[i][j-1]: grid[i][j-1] = (grid[i][j])+(grid[i][j]) grid[i][j] = 0 else: pass 指向的内容。部分代码

grid

您正在更改>>> list_to_add_to = [] >>> def add_to_list(a_list): ... a_list.append('test') ... >>> print(list_to_add_to) [] >>> add_to_list(list_to_add_to) >>> print(list_to_add_to) ['test'] 中的值。所以这样考虑一下:

list_to_add_to

我没有更改grid引用的内容,但我仍然可以修改它。这被称为“就地修改”。

因此,您不必尝试创建新的grid并返回该结果,而是有两种选择:

  1. 修改grid
  2. 的内容
  3. 创建一个新的new_grid(称之为new_grid之类的其他内容)并使用它。然后在功能结束时,将grid中的所有内容复制到{{1}}。

答案 1 :(得分:0)

之间存在差异
  • 具有名称引用不同的值/对象和
  • 修改名称所指的对象。

第一个完成了作业:

a = []
b = a
b = [3]
print(a) # still prints []

第二个只能用可变对象(例如,列表没问题,没有元组):

a = []
b = a
b.append(3)
print(a) # prints [3]

当你进行函数调用时,你基本上都是这样做的:

def f(b):
    b = [3]

仅更改b指向函数内部的内容。

然而,

def g(b):
    b.append(3)

更改调用者提供的list对象。

确切地说,这就是要点:作业中的功能应该就地修改grid。而是为它分配一个不同的对象,它不会传播回调用者。