Python函数通过引用调用在某些语言中,您可以使用特殊的保留字(如ref或val)通过引用或值传递参数。当您将参数传递给Python函数时,它永远不会在离开函数时改变参数的值。唯一的方法是使用全局保留字(或者我当前理解它)。例1:k = 2def foo (n):
n = n * n #clarity regarding comment below
square = n
return squarej = foo(k)print jprint k会表现出来>>4>>2显示k是不变的在此示例中,变量n永远不会更改例2:n = 0def foo():
global n
n = n * n
return n在此示例中,变量n已更改在Python中是否有任何方法可以调用函数并告诉Python 参数是值还是引用参数而不是使用全局?其次,在A级剑桥考试,他们现在说一个函数返回一个单一而过程返回值超过一个值。在80年代,我被教导了一个函数有一个返回语句,而程序没有。为什么现在不正确?
3 回答

慕田峪4524236
TA贡献1875条经验 获得超5个赞
你不能通过Python中的引用传递一个简单的原语,但是你可以做以下事情:
def foo(y): y[0] = y[0]**2x = [5]foo(x)print x[0] # prints 25
然而,这是一种奇怪的方式。请注意,在Python中,您还可以返回多个值,使得一些用于传递引用的用例不那么重要:
def foo(x, y): return x**2, y**2a = 1b = 2a, b = foo(a, b) # a == 2; b == 4
当您返回这样的值时,它们将作为元组返回,而元组又被解压缩。
编辑: 另一种思考方式是,虽然您无法通过Python中的引用显式传递变量,但您可以修改传入的对象的属性。在我的示例(和其他)中,您可以修改列表的成员但是,你不能完全重新分配传入的变量。例如,看到以下两段代码看起来可能会做类似的事情,但结果会有不同的结果:
def clear_a(x): x = []def clear_b(x): while x: x.pop()z = [1,2,3]clear_a(z) # z will not be changedclear_b(z) # z will be emptied
添加回答
举报
0/150
提交
取消