0

両方のプログラムで関数 get_size() を呼び出す前に、「a」の値を変更しました

1位:

a=''
def get_size(b):
    size=len(b)
    return size

def main():
    a='qwerr'
    print 'the size of a is:',get_size(a)
if __name__=='__main__':
    main()

コンソール:the size of a is: 5


2番目:

a=''

def get_size():
    size=len(a)
    return size

def main():
    a='qwerr'
    print 'the size of a is:',get_size()
if __name__=='__main__':
    main()

コンソール:the size of a is: 0

4

3 に答える 3

1

範囲の問題です。最初のプログラムはaのローカル スコープで作成しmain()、それを に渡します。2 番目のプログラムは 内からget_size()グローバルを参照します。2 番目のものを期待どおりに動作させたい場合は、スコープ内でグローバルにする必要があります。aget_size()amain()

main()
    global a
    a = 'qwerr'
    print 'the size of a is:',get_size()

コメントで指摘されているように、両方のバージョンでmain()-scopedaが作成されますが、get_size()バージョン 1 では global を参照するためa、 localaを設定しても動作にmain()影響はありませんget_size()

ただし、実際には、ここで発生しているあいまいさを正確に回避するために、グローバルを使用しないようにする必要があります。

于 2013-04-25T17:22:33.787 に答える
0

2 番目のプログラムでは、get_size メソッドはローカル スコープで 'a' 値をチェックしますが、ローカル スコープには存在しないため、グローバル スコープで検証します。

于 2013-04-25T17:27:44.157 に答える