怎么使用Python局部函数?针对这个问题,这篇文章详细介绍了相对应的分析和解答,希望可以帮助更多想解决这个问题的小伙伴找到更简单易行的方法。
我们之前所看到的函数都是在全局范围内定义的,它们都是全局函数.Python还支持在函数体内定义函数,这种被放在函数体内定义的函数称为局部函数。
在默认情况下,局部函数对外部是隐藏的,局部函数只能在其封闭(封闭)函数内有效,其封闭函数也可以返回局部函数,以便程序在其他作用域中使用局部函数。
def get_math_func(类型、,nn),: ,,,#,定义一个计算平方的局部函数 ,,,def 广场(n),:,, #① ,,,,,,,return n *, n ,,,#,定义一个计算立方的局部函数 ,,,def 多维数据集(n),:,, #② ,,,,,,,return n *, n *, n ,,,#,定义一个计算阶乘的局部函数 ,,,def 阶乘(n),:,,, #③ ,,,,,,,result =1 ,,,,,,,for index 拷贝范围(2,n +, 1),: ,,,,,,,,,,,result *=,指数 ,,,,,,,return 结果 ,,,#,调用局部函数 ,,,if type ==,“square",: ,,,,,,,return 广场(nn) ,,,elif type ==,“cube": ,,,,,,,return 多维数据集(nn) ,,,: ,,,,,,,return 阶乘(nn) 打印(get_math_func (“square",, 3)), #,输出9 打印(get_math_func (“cube",, 3)), #,输出27 print (get_math_func(“,,, 3)), #,输出6
上面程序中第一行粗体字代码定义了get_math_func()函数,接下来程序的①,②,③号代码定义了3个局部函数,而get_math_func()函数则根据参数选择调用不同的局部函数。
如果封闭函数没有返回局部函数,那么局部函数只能在封闭函数内部调用,如上面程序所示。另外,还会出现一种情况,如果封闭函数将局部函数返回,且程序使用变量保存了封闭函数的返回值,那么这些局部函数的作用域就会被扩大,因此程序完全可以自由地调用它们,就像它们都是全局函数一样(函数返回函数的情况后续章节会详细介绍)。
局部函数内的变量也会遮蔽它所在函数内的局部变量(这句话有点拗口),请看如下代码:
def foo (): ,,,#,局部变量的名字 ,,,name =, & # 39;查理# 39; ,,,def bar (): ,,,,,,,#,访问律师函数所在的foo函数的名字局部变量 ,,,,,,,印刷(名字),#,查理 ,,,,,,,name =, & # 39;孙悟空& # 39; 酒吧,,,() foo ()
运行上面代码,会导致如下错误:
UnboundLocalError:, local variable & # 39;名字# 39;,referenced before 任务
为了声明杆()函数中的“name=& # 39;孙悟空& # 39;“赋值语句不是定义新的局部变量,只是访问它所在foo()函数内的名字局部变量,Python提供了外地关键字,通过外地语句即可声明访问赋值语句只是访问该函数所在函数内的局部变量。将上面程序改为如下形式:
def foo (): ,,,#,局部变量的名字 ,,,name =, & # 39;查理# 39; ,,,def bar (): ,,,,nonlocal 名字 ,,,,,,,#,访问律师函数所在的foo函数的名字局部变量 ,,,,,,,印刷(名字),#,查理 ,,,,,,,name =, & # 39;孙悟空& # 39; 酒吧,,,() foo ()
增加上面程序中第5行之后,接下来酒吧()函数中的“name=& # 39;孙悟空& # 39;”就不再是定义新的局部变量,而是访问它所在函数(foo()函数)内的名字局部变量。
关于怎么使用Python局部函数问题的解答就分享到这里了,希望以上内容可以对大家有一定的帮助,如果你还有很多疑惑没有解开,可以关注行业资讯频道了解更多相关知识。