You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Python如何让函数交换不可变值的效果同步到外部?

如何在Python中无需返回值赋值实现整数交换?

问题核心原因

Python中整数是不可变类型,且参数传递采用传对象引用的方式:当你把外部的a、b传入函数时,函数内部的a、b只是指向原整数对象的新引用。一旦在函数内执行a = b这类赋值操作,实际上是让函数内的引用指向了新的整数对象,并不会改变外部原变量的指向,因此外部变量值不会变化。

无需返回值赋值的可行方案

如果你不想通过a, b = func(a, b)的方式接收返回值,可以通过以下两种方式实现:

1. 使用可变容器包裹整数

利用列表、字典等可变类型的特性——修改容器内的元素会直接影响外部的容器对象,无需返回重新赋值:

普通函数版本

def swap(lst):
    # 直接修改列表内的元素
    lst[0], lst[1] = lst[1], lst[0]

nums = [7, 11]
print("调用前:", nums)  # 调用前: [7, 11]
swap(nums)
print("调用后:", nums)  # 调用后: [11, 7]

类方法版本

class Solution:
    def swap_two_numbers(self, lst):
        print('函数内交换前')
        print(f'a = {lst[0]}')
        print(f'b = {lst[1]}')

        lst[0], lst[1] = lst[1], lst[0]

        print('函数内交换后')
        print(f'a = {lst[0]}')
        print(f'b = {lst[1]}')

solution = Solution()
nums = [7, 11]
print('函数调用前')
print(f'a = {nums[0]}')
print(f'b = {nums[1]}')
solution.swap_two_numbers(nums)
print('函数调用后')
print(f'a = {nums[0]}')
print(f'b = {nums[1]}')

2. 使用全局变量(不推荐)

通过global关键字声明变量为全局变量,直接在函数内修改全局变量的值。但这种方式会增加代码耦合度,降低可读性和可维护性,仅在极其简单的场景下建议使用:

a = 7
b = 11

def swap():
    global a, b
    a, b = b, a

print("调用前:", a, b)  # 调用前: 7 11
swap()
print("调用后:", a, b)  # 调用后: 11 7

总结

  • 最合理且符合Python编码规范的方式是使用可变容器包裹整数,既实现了需求,又避免了返回值赋值的步骤。
  • 全局变量虽然能达成效果,但会带来代码维护问题,不推荐在生产代码中使用。

内容的提问来源于stack exchange,提问作者Jeff

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.07.01 20:01:15