首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >参数:按引用传递与按名称传递

参数:按引用传递与按名称传递
EN

Stack Overflow用户
提问于 2011-05-09 17:47:24
回答 3查看 2.6K关注 0票数 1

在Python中,通过引用传递的参数传递模式和按名称传递的参数之间有什么区别,但假设我们没有使用任何Python规则:

代码语言:javascript
运行
复制
def P(x,y)
   global i
   y=1
   print(x)
   i=2
   print(x,y)
i=0
a = [7,11,13]
P(a[i],i)
P(i,a[i])

因此,这里通过引用传递参数将给出输出:

  • 7
  • 7,2
  • 2
  • 2,1

如果有任何错误,我提前道歉。

传递名称说,我们只是应用文本替代,但我仍然对如何使用名称调用获取输出感到困惑。有什么帮助吗?

下面是我所使用的传递名称:

  • 7
  • 11,2
  • 2
  • 2,1

是对的吗?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-10-25 00:43:04

几乎是一样的。但有时他们的工作方式不同。下面是一个例子。

代码语言:javascript
运行
复制
Effect of the call swap (x, y):
  temp := x;
  x := y;
  y := temp
Effect of the call swap (i, x[i]):
  temp := i;
  i := x[i];
  x[i] := temp
It does not work! For example:
Before call: i = 2, x[2] = 5
After call: i = 5, x[2] = 5, x[5] = 2

这里有一个详细的描述,范围.绑定.纸尺.传递.技术。检查这篇文章“参数传递技术”,你会找到答案的。

票数 1
EN

Stack Overflow用户

发布于 2011-05-09 18:37:40

在Python中,对象要么是可变的,要么是不可变的。所有名称都是对对象的引用。换句话说,一切都是参考。在Python中,您不会“按值传递”。只有参考才能通过。如果您试图修改一个不可变的对象(例如数字或字符串),您将自动获得一个新的副本。您可以返回这个新值。如果您传递一个可变对象(例如,list或dict),则该对象将被修改,您不必返回它。如果你不想要,你应该先复制你的对象。为此,您可以使用dict.copy()list[:]语法。

票数 5
EN

Stack Overflow用户

发布于 2011-05-09 22:38:03

我不知道这是不是你想要的,但我可以解释一下按名字打电话和按名字打电话的区别。如果通过引用调用带有参数的函数,则对该变量的任何修改都会在调用该变量的函数中更改它。例如,如果以下函数通过引用获得x:

代码语言:javascript
运行
复制
def foo(x):
    x = x+1

def main():
    x = 5
    foo(x)
    print x

如果你叫了它的名字,它就会打印5。

这有意义吗?

票数 -2
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5940533

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档