叶子绿

分享自己的一些前端经验,做改变世界的产品。 再次出发…

  博客园  :: 首页  :: 新随笔  :: 联系 :: 订阅 订阅  :: 管理
代码
1 # -*- coding:utf-8 -*-
2  import sys
3
4  def ms_fun():
5 obj = 3
6 def ms_k():
7 if obj is not 4:
8 obj = 4
9 print(obj)
10 ms_k()
11
12  if __name__ == '__main__':
13 ms_fun()

上述代码会抛出 UnboundLocalError:local variable 'obj' referenced before assignment 的异常

代码
# -*- coding:utf-8 -*-
import sys

def ms_fun():
obj
= 3
def ms_k():
#global obj
if obj is not 4:
global obj
obj
= 4
print(obj)
ms_k()

if __name__ == '__main__':
ms_fun()

上述代码会抛出NameError: global name 'obj' is not defined

总结一下:如果你和我一样,熟悉javascript的语法,并且刚开始接触python.那么你很容易受javascript的语法 ,陷入习惯性思维误区.python的语法更灵活多变,甚至有些诡异.

如果内部函数有引用外部函数的同名变量,并且对这个变量有修改.那么python会认为它是一个局部变量.可以这样改

代码
# -*- coding:utf-8 -*-
import sys

obj
= 3
def ms_fun():
def ms_k():
global obj
if obj is not 4:
obj
= 4
print(obj)
ms_k()

if __name__ == '__main__':
ms_fun()
posted on 2010-03-13 14:01  叶子绿  阅读(4492)  评论(1)    收藏  举报