如何在 Python 中通过引用传递整数?
我想修改传递给函数的变量的值。我读到过 Python 中的所有内容都是按值传递的,但必须有一个简单的技巧。例如,在 Java 中,您可以传递引用类型Integer、Long等。
Integer
Long
在 Python 中,变量是对对象的引用,所有事物都是对象,包括整数。但是,Python 中的整数是不可变的,这意味着当你修改一个整数时,你实际上是创建一个新的整数对象,而不是改变原始整数。
要模拟通过引用传递整数(即允许函数修改整数的值),您可以将整数包装在可变容器中,例如列表或自定义对象。以下是操作方法:
您可以使用单元素列表来包装整数。列表是可变的,因此您可以在函数内修改列表内的元素。
def modify_value(val): val[0] += 10 # Modify the value inside the list # Usage x = [5] # x is a list containing one integer modify_value(x) print(x[0]) # Output will be 15
另一种方法是创建一个小类,将整数作为属性,允许您在函数内修改整数。
class RefInt: def __init__(self, value): self.value = value def modify_value(val): val.value += 10 # Modify the attribute of the object # Usage x = RefInt(5) modify_value(x) print(x.value) # Output will be 15
您还可以使用字典来保存整数值。这种方法类似于使用列表,因为字典也是可变的。
def modify_value(val): val['value'] += 10 # Modify the value in the dictionary # Usage x = {'value': 5} modify_value(x) print(x['value']) # Output will be 15
使用不可变类型以简化代码:通常,您应该遵循 Python 的设计理念,并在不需要修改值的情况下使用不可变类型(如整数)。这样可以使您的代码保持简单,并降低意外副作用的风险。
使用包装器实现可变行为:当您需要可变行为时,使用列表、字典或自定义类等包装器是可以接受且明确的。这种方法使意图变得明确,因为它表明该值是要修改的。
优先使用函数返回值:不要直接修改值,而是考虑从函数返回修改后的值。这种方法在 Python 中更为惯用:
``` def modify_value(val): return val + 10
# Usage x = 5 x = modify_value(x) print(x) # Output will be 15 ```
这种模式更清晰、更容易理解,特别是在处理整数等简单数据类型时。
总而言之,虽然由于整数的不可变性,您无法直接通过引用传递整数,但将它们包装在可变容器(如列表、字典或自定义类)中可以实现类似的行为。不过,请考虑返回修改后的值是否是一种更符合 Python 风格的方法。