python函数调用的问题
本文介绍了python函数调用的问题的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!
问题描述
问 题
最近在看《Python语言及其应用》这本书,里面提到了函数调用的一个坑,没有搞懂是怎么回事,求教一下。
先看代码和输出吧
def buggy(arg, result=[]):
result.append(arg)
print(result)
def work(arg):
result = []
result.append(arg)
return result
def nonbuggy(arg, result=[]):
if result is None:
result = []
result.append(arg)
return result
def test(arg, result=[]):
result.append(arg)
return result
print('---buggy---')
buggy('a')
buggy('b')
print('---work---')
print(work('a'))
print(work('b'))
print('---nonbuggy---')
print(nonbuggy('a'))
print(nonbuggy('b'))
print('---test---')
print(test('a'))
print(test('b'))
输出
---buggy---
['a']
['a', 'b']
---work---
['a']
['b']
---nonbuggy---
['a']
['b']
---test---
['a']
['a', 'b']
不明白为什么buggy()
和test()
函数得到的结果会受到之前调用的影响。这是不是和python
的内存模型有关系?
解决方案
参数默认值 result = [] 在定义期就已创建,每次执行 result 指向同一个对象
这篇关于python函数调用的问题的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!
查看全文