为何全局变量num输出0而非6?如何修改实现预期效果?
问题原因
你函数里的num = num1其实是创建了一个局部变量,和全局的num根本不是同一个东西。Python默认规则是:函数内部给变量赋值时,这个变量会被当成局部变量处理,除非你明确告诉它要使用全局的那个变量。所以最后一次调用average时,函数里的num只是临时存在的局部变量,函数执行完就销毁了,全局的num还是初始的0。
修改方法
有两种靠谱的修改方式:
- 方式一:在函数里声明
num是全局变量
直接在函数开头加global num,这样函数里对num的赋值就会作用到全局变量上:num = 0 def average(num1, num2, num3): global num num = num1 return (num1 + num2 + num3) / 3 print(average(7, 5, 9)) print(average(6, 6, 7)) print(num) # 现在输出6 - 方式二:让函数返回
num1,再手动赋值给全局num
这种方式更符合函数的封装原则,不直接操作全局变量:num = 0 def average(num1, num2, num3): # 返回平均值和当前的num1 return (num1 + num2 + num3) / 3, num1 # 调用时同时接收返回的平均值和num1,更新全局num avg1, num = average(7, 5, 9) avg2, num = average(6, 6, 7) print(avg1) print(avg2) print(num) # 输出6
内容的提问来源于stack exchange,提问作者김김김
相关产品推荐
相关产品推荐

