为了账号安全,请及时绑定邮箱和手机立即绑定

Python函数通过引用调用

Python函数通过引用调用

元芳怎么了 2019-08-26 14:56:12
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


查看完整回答
反对 回复 2019-08-26
  • 3 回答
  • 0 关注
  • 963 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
意见反馈 帮助中心 APP下载
官方微信