python函数调用的问题
PHP中文网
PHP中文网 2017-04-18 09:41:22
0
1
352

最近在看《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的内存模型有关系?

PHP中文网
PHP中文网

认证高级PHP讲师

全員に返信(1)
Ty80

パラメータのデフォルト値 result = [] は 定義期間中に作成され、実行されるたびに result は同じオブジェクトを指します

いいねを押す +0
人気のチュートリアル
詳細>
最新のダウンロード
詳細>
ウェブエフェクト
公式サイト
サイト素材
フロントエンドテンプレート