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

在Python中通过引用传递整数

在Python中通过引用传递整数

侃侃无极 2019-08-28 10:56:08
在Python中通过引用传递整数如何在Python中通过引用传递整数?我想修改我传递给函数的变量的值。我已经读过Python中的所有内容都是按值传递的,但必须有一个简单的技巧。例如,在Java中,你可以通过引用类型的Integer,Long等等。如何通过引用将整数传递给函数?什么是最佳做法?
查看完整描述

3 回答

?
RISEBY

TA贡献1856条经验 获得超5个赞

它在Python中并不是那么有用。Python传递对象的引用。在你的函数里面你有一个对象 - 你可以自由地改变那个对象(如果可能的话)。但是,整数是不可变的。一种解决方法是在可以变异的容器中传递整数:

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

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

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

通常,解决方法是简单地返回您想要的对象:

def multiply_by_2(x):
    return 2*x

x = 1x = multiply_by_2(x)

*在上面的第一个示例中,3实际上传递给了x.__setitem__


查看完整回答
反对 回复 2019-08-28
?
慕沐林林

TA贡献2016条经验 获得超9个赞

您需要通过引用传递的大多数情况是您需要将多个值返回给调用者的位置。“最佳实践”是使用多个返回值,这在Python中比在Java等语言中更容易实现。

这是一个简单的例子:

def RectToPolar(x, y):
    r = (x ** 2 + y ** 2) ** 0.5
    theta = math.atan2(y, x)
    return r, theta # return 2 things at oncer, theta = RectToPolar(3, 4) # assign 2 things at once


查看完整回答
反对 回复 2019-08-28
?
三国纷争

TA贡献1804条经验 获得超7个赞

真的,最好的做法是退后一步,询问你是否真的需要这样做。为什么要修改传递给函数的变量的值?

如果你需要快速进行黑客攻击,那么最快的方法是传递一个list持有整数,并坚持[0]使用它,就像mgilson的回答所示。

如果你需要为更重要的事情做一些事情,那就写一个class具有int属性的东西,这样你就可以设置它。当然这会迫使你为这个类提出一个好名字,对于属性 - 如果你想不出任何东西,那就回去再读一遍这句话,然后再使用list

更一般地说,如果你试图将一些Java习惯用法直接移植到Python,你就错了。即使存在直接对应的东西(与static/一样@staticmethod),你仍然不想在大多数Python程序中使用它,因为你在Java中使用它。


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

添加回答

举报

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