#全局函数 def outdef (): #局部函数 def indef(): print("http://task.lmcjl.com/python/") #调用局部函数 indef() #调用全局函数 outdef()程序执行结果为:
http://task.lmcjl.com/python/
#全局函数 def outdef (): #局部函数 def indef(): print("调用局部函数") #调用局部函数 return indef #调用全局函数 new_indef = outdef() 调用全局函数中的局部函数 new_indef()程序执行结果为:
调用局部函数
因此,对于局部函数的作用域,可以总结为:如果所在函数没有返回局部函数,则局部函数的可用范围仅限于所在函数内部;反之,如果所在函数将局部函数作为返回值,则局部函数的作用域就会扩大,既可以在所在函数内部使用,也可以在所在函数的作用域中使用。#全局函数 def outdef (): name = "所在函数中定义的 name 变量" #局部函数 def indef(): print(name) name = "局部函数中定义的 name 变量" indef() #调用全局函数 outdef()执行此程序,Python 解释器会报如下错误:
UnboundLocalError: local variable 'name' referenced before assignment
此错误直译过来的意思是“局部变量 name 还没定义就使用”。导致该错误的原因就在于,局部函数 indef() 中定义的 name 变量遮蔽了所在函数 outdef() 中定义的 name 变量。再加上,indef() 函数中 name 变量的定义位于 print() 输出语句之后,导致 print(name) 语句在执行时找不到定义的 name 变量,因此程序报错。#全局函数 def outdef (): name = "所在函数中定义的 name 变量" #局部函数 def indef(): nonlocal name print(name) #修改name变量的值 name = "局部函数中定义的 name 变量" indef() #调用全局函数 outdef()程序执行结果为:
所在函数中定义的 name 变量
本文链接:http://task.lmcjl.com/news/9561.html