0

在两个程序中调用函数 get_size() 之前,我已经更改了“a”的值

第一个:

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


第二:

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(),然后将其传递给get_size(),而第二个程序a从 内部引用全局get_size()。如果您希望第二个按预期工作,则需要a在范围内进行全局设置main()

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

正如评论中所指出的,在两个版本中都创建了main()-scoped a,但是由于get_size()在版本 1 中引用了 global a,因此设置 local ainmain()get_size()操作的内容没有影响。

但实际上,您应该尽量不要使用全局变量,部分是为了避免您在这里遇到的歧义。

于 2013-04-25T17:22:33.787 回答
1

在第一个程序中,您将 a 设置为全局范围,然后将其重置为 def 主范围中的另一个字符串。

于 2013-04-25T17:24:33.320 回答
0

在第二个程序中,get_size 方法将在其本地范围内检查“a”值,但由于它不在其本地范围内,然后它将在其全局范围内进行验证

于 2013-04-25T17:27:44.157 回答