当前位置: 首页 > 面试题库 >

在Python中通过引用传递整数

袁宜民
2023-03-14
问题内容

如何在Python中通过引用传递整数?

我想修改传递给函数的变量的值。我读过Python中的所有内容都是按值传递的,但是必须有一个简单的技巧。例如,在Java中,你可以通过引用类型的IntegerLong等等。

  1. 如何通过引用将整数传递给函数?
  2. 最佳做法是什么?

问题答案:

在Python中,这种方式不太有效。Python将引用传递给对象。在函数内部,你有一个对象-你可以随意更改该对象(如果可能)。但是,整数是不可变的。一种解决方法是在可以更改的容器中传递整数:

def change(x):
    x[0] = 3

x = [1]
change(x)
print x

这充其量是丑陋的/笨拙的,但是你不会在Python中做得更好。原因是因为在Python中,赋值(=)接收右侧对象结果的任何对象,并将其绑定到左侧对象*(或将其传递给适当的函数)。

理解了这一点,我们可以看到为什么无法更改函数内部不可变对象的值的原因-你不能更改其任何属性,因为它是不可变的,并且你不能仅给新的“变量”赋值值,因为你实际上是在创建一个新对象(与旧对象不同),并为其赋予旧对象在本地名称空间中的名称。

通常,解决方法是简单地返回所需的对象:

def multiply_by_2(x):
    return 2*x

x = 1
x = multiply_by_2(x)

*在上述第一个示例中,3实际上传递给x.setitem



 类似资料:
  • 问题内容: 我有以下代码: 有人可以解释为什么输出是:零一二二。 摘自zend认证学习指南。 问题答案: 因为在第二个循环中,仍然是对最后一个数组项的引用,所以每次都将其覆盖。 您可以看到这样的内容: 如您所见,最后一个数组项采用当前循环值:“零”,“一个”,“两个”,然后就是“两个” …:)

  • 问题内容: Python文档似乎尚不清楚参数是通过引用还是通过值传递,并且以下代码会产生未更改的值“原始” 我可以做些什么来通过实际引用传递变量吗? 问题答案: 传入的参数实际上是对对象的引用(但引用是通过值传递的) 有些数据类型是可变的,但有些则不是 所以: 如果将可变对象传递给方法,则该方法将获得对该对象的引用,并且可以对其进行突变,但是如果您将该引用重新绑定到该方法中,则外部作用域对此一无所

  • 问题内容: 这两个代码有什么区别: 代码A: 哪里 VS. 代码B: 这两个代码之间有什么区别吗? 问题答案: Java始终按值传递参数,而不按引用传递参数。 让我通过一个例子解释一下: 我将逐步解释这一点: 声明一个名为ftype 的引用,Foo并将其分配给Foo具有属性的type的新对象”f”。 从方法方面,声明Foo具有名称的类型引用,a并将其初始分配给null。 调用方法时changeRe

  • 问题内容: Go中的地图是否通过值或引用传递? 始终可以将函数定义为以下形式,但这是一个过大的杀伤力吗? 相同的返回值问题。我应该返回指向地图的指针,还是将地图作为值返回? 这样做的目的当然是避免不必要的数据复制。 问题答案: 在此线程中,您将找到答案: Golang:使用地图参考来访问地图 您不需要在地图上使用指针。 映射类型是引用类型,例如指针或切片[1] 如果需要更改会话,可以使用一个指针:

  • 问题内容: 有人可以告诉我这个RMI聊天应用程序为什么不能正常工作的地方,目的是通过远程对象或序列化对象实现客户端,服务器和逻辑之间的分离。 我想用作业务逻辑(游戏逻辑)的对象。 其实现: 管理客户端线程的类 Service.java:服务器将要注册并绑定到的对象。 ServerServicesImpl.java:服务器的实现端 问题答案: 正如 Ernest Friedman-Hill 在链接文

  • 问题内容: 如何在JavaScript中通过引用传递变量?我要对3个变量执行一些操作,因此我想将它们放在for循环中并对每个变量执行操作。 伪代码: 做这个的最好方式是什么? 问题答案: JavaScript中没有可用的“通过引用传递”。您可以传递一个对象(也就是说,您可以按值传递对一个对象的引用),然后让一个函数修改该对象的内容: 您可以使用数字索引遍历数组的属性,并根据需要修改数组的每个单元格