这是我正在尝试制作的游戏的简化代码部分。 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)
答案 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)
会看到另一个副本。