函数内的函数来改变变量

时间:2015-12-22 10:45:29

标签: python function variables

这是我正在尝试制作的游戏的简化代码部分。 primary_function 中存在一个条件,即如果满意将运行操作,在这种情况下 secondary_function 加入其中,则操作本身就是一个改变的功能一个特定的变量。问题是它不会改变变量。打印(变量)返回1.

variable = 1

def secondary_function(var):
    var += 1

def function(parameter_1, parameter_2, action = None, var = None):
    if condition == 'satisfied':
        action(var)

function(1, 2, secondary_function, variable)

print(variable)

2 个答案:

答案 0 :(得分:2)

Python中的变量不是通过引用传递的,并且没有办法这样做。因此,一个采用整数参数并只增加它的函数永远不会影响原始变量。如果要修改原始变量,则必须为其分配新值。

def secondary_function(var):
    return var + 1

variable = 1
variable = secondary_function(variable) # variable is now 2

类似地,您还必须修改函数function以返回值:

def function (parameter_1, parameter_2, action = None, var = None):
    if parameter_1 == 1:
        return action(var)

variable = function(1, 2, secondary_function, variable)

Python没有传递引用或传值的概念。相反,每个变量都通过赋值传递。这意味着无论何时调用函数并传递变量,行为都与您刚刚执行function_argument = variable时的行为相同;您将源变量的分配给函数参数。由于Python是面向对象的,因此这实际上意味着您将引用复制到variable引用的对象。因此,当对象是 mutable 时,您可以修改它并影响引用同一对象的其他变量。但是对于不可变对象(整数,字符串,元组等),你无法修改现有对象,所以当你“修改”它时,你总是给变量分配一个新对象,而不会影响仍然指向的所有其他变量。旧的对象。

答案 1 :(得分:0)

Python中的函数参数,由value传递。因此,function(var)会在variable中看到var的副本,secondary_function(var)会看到另一个副本。