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

Python中变量(含DataFrame)传递及函数赋值问题咨询

关于Python函数修改变量的两个问题解答

嘿,我来帮你把这两个问题掰扯清楚!

一、为什么调用函数后变量a还是0?

这是因为Python里的参数传递规则——对于像整数、字符串这种不可变类型,函数内部对参数的重新赋值其实是创建了新的对象,并不会影响外部原来的变量。

你看你的代码:

def set_values(x,y): 
    x,y=6,7 
    return x,y 

set_values(0,0)

这里你把0传进去当x和y,但函数里的x,y=6,7只是在函数内部创建了新的整数对象6和7,和外部的0没有关系。而且你调用函数后没有接收返回值,所以外部自然看不到变化。

解决方法有两种:

  • 接收函数的返回值:这是最推荐的方式,直接把函数返回的新值赋值给外部变量:
    def set_values(x,y): 
        x,y=6,7 
        return x,y 
    
    a, b = set_values(0, 0)
    print(a)  # 输出6,这时候a就被更新啦
    
  • 用可变对象包装(比如列表):如果一定要通过函数直接修改外部变量,可以把变量放进列表(可变类型)里,函数修改列表的元素:
    def set_values(lst):
        lst[0], lst[1] = 6, 7
    
    a_b_list = [0, 0]
    set_values(a_b_list)
    a, b = a_b_list[0], a_b_list[1]
    print(a)  # 输出6
    

二、给变量a、b赋值必须先初始化吗?

分两种情况看:

  1. 如果是想在函数外部使用a、b:完全不需要提前初始化!你可以直接在调用函数时,用函数的返回值来首次赋值a和b,比如:
    def set_values():
        return 6, 7
    
    # 这里a和b是第一次被使用,直接接收返回值就行
    a, b = set_values()
    print(a, b)  # 输出6 7
    
  2. 如果是想在函数内部修改外部的全局变量a、b:那你需要先在外部定义(初始化)它们,然后在函数里用global声明,但这种方式不推荐,因为全局变量容易让代码逻辑变乱。比如:
    a = 0
    b = 0
    
    def set_values():
        global a, b
        a, b = 6, 7
    
    set_values()
    print(a)  # 输出6
    

总的来说,优先用返回值接收的方式来获取函数处理后的变量,既清晰又不容易出错~

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

相关产品推荐
方舟 Agent Plan

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

最近更新时间:2026.05.11 08:38:06