python 函数变量的查找顺序:优先级为: 局部---> 全局---> 如果仍没找到,将引发NameError错误。
#!/usr/bin/env python #coding:utf-8 #@Author:Andy # Date: 2017/6/14 money = 1000 def tell_info(name): print("%s have %d " % (name, money)) def fun(): money = 10 tell_info('egon') fun() # egon have 1000 # tell_info 函数在fun函数内部执行,但是仍需要回到定义的地方去查找相关变量 # 优先从局部找,局部没有找全局,因为函数字义时money=1000,而与执行位置的money=10,无关. money = 1000 def f1(): money = 10 def tell_inform(name): print("%s have %d " % (name, money)) tell_inform('egon') f1() # egon have 10 # tell_inform函数在f1内部定义,且有局部变量的定义,所以在查找变量值是找到局部即停止 # 不会再往全局找,所以此处money 最终结果为10 """ 函数作用域与该函数在哪执行无关,只与定义函数有关。不管在哪调用都会回到定义阶段去 找对应的作用域关系。查找顺序为: 局部---> 全局 --- > NameError """