Python 为什么这两个程序会产生不同的结果?

Python 为什么这两个程序会产生不同的结果?,python,parameters,Python,Parameters,在两个程序中调用函数get_size()之前,我更改了“a”的值 第一: 控制台:a的大小为:5 第二: 控制台:的大小是:0这是一个范围问题。第一个程序在main()。如果希望第二个按预期工作,则需要在main()范围内使aglobal main() global a a = 'qwerr' print 'the size of a is:',get_size() 正如评论中所指出的,在两个版本中都创建了一个main()-作用域a,但由于版本1中的get\u siz

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

第一:

控制台:
a的大小为:5


第二:


控制台:
的大小是:0

这是一个范围问题。第一个程序在
main()。如果希望第二个按预期工作,则需要在
main()
范围内使
a
global

main()
    global a
    a = 'qwerr'
    print 'the size of a is:',get_size()
正如评论中所指出的,在两个版本中都创建了一个
main()
-作用域
a
,但由于版本1中的
get\u size()
引用了全局
a
,因此在
main()
中设置本地
a
get\u size()
的操作没有影响


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

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

在第二个程序中,get_size方法将在其局部作用域中检查'a'值,但由于它不在其局部作用域中,然后它将在两个程序中的全局作用域中进行验证,
main
创建一个局部
a
@delnan Yes,但是由于
get_size()
在第一个版本中使用了全局
a
,这一事实是不相关的。我将尝试更新我的答案的措辞以澄清。
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()
main()
    global a
    a = 'qwerr'
    print 'the size of a is:',get_size()