千博企业网站管理系统2013,seo产品优化推广,广州比较好的网站建设,网站建设分工Python 函数内部可以定义变量#xff0c;这样就产生了局部变量#xff0c;可能有人会问#xff0c;Python 函数内部能定义函数吗#xff1f;答案是肯定的。Python 支持在函数内部定义函数#xff0c;此类函数又称为局部函数。
那么#xff0c;局部函数有哪些特征#x…Python 函数内部可以定义变量这样就产生了局部变量可能有人会问Python 函数内部能定义函数吗答案是肯定的。Python 支持在函数内部定义函数此类函数又称为局部函数。
那么局部函数有哪些特征在使用时需要注意什么呢接下来就详细介绍 Python 局部函数的用法。
首先和局部变量一样默认情况下局部函数只能在其所在函数的作用域内使用。举个例子
#全局函数
def outdef ():#局部函数def indef():print(http://www.CSDN.net/)#调用局部函数indef()
#调用全局函数
outdef()
程序执行结果为
http://www.CSDN.net/
就如同全局函数返回其局部变量就可以扩大该变量的作用域一样通过将局部函数作为所在函数的返回值也可以扩大局部函数的使用范围。例如修改上面程序为
#全局函数
def outdef ():#局部函数def indef():print(调用局部函数)#调用局部函数return indef
#调用全局函数
new_indef outdef()
调用全局函数中的局部函数
new_indef()
程序执行结果为 调用局部函数 因此对于局部函数的作用域可以总结为如果所在函数没有返回局部函数则局部函数的可用范围仅限于所在函数内部反之如果所在函数将局部函数作为返回值则局部函数的作用域就会扩大既可以在所在函数内部使用也可以在所在函数的作用域中使用。
以上面程序中的 outdef() 和 indef() 为例如果 outdef() 不将 indef 作为返回值则 indef() 只能在 outdef() 函数内部使用反之则 indef() 函数既可以在 outdef() 函数内部使用也可以在 outdef() 函数的作用域也就是全局范围内使用。
另外值得一提的是如果局部函数中定义有和所在函数中变量同名的变量也会发生“遮蔽”的问题。例如
#全局函数
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 变量因此程序报错。
由于这里的 name 变量也是局部变量因此前面章节讲解的 globals() 函数或者 globals 关键字并不适用于解决此问题。这里可以使用 Python 提供的 nonlocal 关键字。
例如修改上面程序为
#全局函数
def outdef ():name 所在函数中定义的 name 变量#局部函数def indef():nonlocal nameprint(name)#修改name变量的值name 局部函数中定义的 name 变量indef()
#调用全局函数
outdef()
程序执行结果为
所在函数中定义的 name 变量 Python教程8天python从入门到精通学python看这套就够了