为什么这两个程序导致不同的结果?

时间:2013-04-25 17:20:45

标签: python parameters

在两个程序

中调用函数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

3 个答案:

答案 0 :(得分:1)

这是一个范围问题。第一个程序在a的本地范围内创建main(),然后将其传递给get_size(),而第二个程序从a中引用全局get_size()。如果您希望第二个按预期工作,则需要在a范围内设置main()全局。

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

正如评论中所指出的,在两个版本中都创建了main() - 作用域a,但由于版本1中的get_size()引用了全局a,因此设置了a中的本地main()get_size()的操作没有影响。

实际上,你应该尝试不使用全局变量,部分原因是为了避免你在这里遇到的模糊性。

答案 1 :(得分:1)

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

答案 2 :(得分:0)

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