龙空技术网

python的nonlocal语句基础及应用场景

梯阅线条 120

前言:

而今各位老铁们对“pythonlocal”都比较关心,朋友们都想要分析一些“pythonlocal”的相关内容。那么小编在网络上搜集了一些关于“pythonlocal””的相关内容,希望小伙伴们能喜欢,朋友们快快来学习一下吧!

python嵌套函数的内部函数可以引用嵌套作用域(外部函数)的变量,但是不能修改变量值。

示例

# 可以引用嵌套作用域变量>>> def outf():    a='梯阅线条'    def inf():        print(a)    return inf>>> f=outf()>>> f()梯阅线条# 不可修改嵌套作用域变量值>>> def outf():    a='梯阅线条'    def inf():        print(a)        a='tyxt'    return inf>>> f=outf()>>> f()Traceback (most recent call last):  File "<pyshell#28>", line 1, in <module>    f()  File "<pyshell#26>", line 4, in inf    print(a)UnboundLocalError: local variable 'a' referenced before assignment
1.1 python的nonlocal语句基础

python中如果要修改嵌套作用域变量的值,就要用nonlocal语句。

用法

    def inf():        nonlocal v1,v2,...

描述

python的nonlocal语句用于嵌套函数的内部函数;

nonlocal后面接变量名,此变量必须在外部函数已经被赋值过;

nonlocal后面接的变量,不能在内部函数第一次赋值;

nonlocal修饰的变量,只会在外部函数搜索作用域(嵌套作用域),不会搜索全局和内置作用域。

示例

>>> def outf():    v1='梯阅线条'    v2='tyxt'    def inf():        nonlocal v1,v2        print(v1,v2)        v1='nonlocal1'        v2='nonlocal2'        print(v1,v2)    return inf>>> f=outf()>>> f()梯阅线条 tyxtnonlocal1 nonlocal2# 外部函数未定义nonlocal变量,在内部函数定义并且声明nonlocal变量,报变量必须在nonlocal作用域(嵌套作用域,外部函数作用域)定义。>>> def outf():    def inf():        v1='梯阅线条'        nonlocal v1        SyntaxError: name 'v1' is assigned to before nonlocal declaration# 外部函数未定义nonlocal变量,在内部函数声明nonlocal变量,报nonlocal变量未找到>>> def outf():    def inf():        nonlocal v1        SyntaxError: no binding for nonlocal 'v1' found# nonlocal修饰变量不会搜索全局作用域,包nonlocal变量未找到>>> v1='梯阅线条'>>> def outf():    def inf():        nonlocal v1        SyntaxError: no binding for nonlocal 'v1' found
1.2 python的nonlocal应用场景

python的nonlocal用于编号。

示例

>>> def outf(beg):    num=beg    def inf(name):        nonlocal num        print(name,num)        num+=1    return inf>>> f=outf(1)>>> f('张三')张三 1>>> f('李四')李四 2>>> f('王五')王五 3

python的nonlocal用于计算平均值。

>>> def outf(beg):    count=0    total=beg    def inf(num):        nonlocal count,total        count+=1        total+=num        return total/count    return inf>>> f=outf(0)>>> f(10)10.0>>> f(20)15.0>>> f(30)20.0>>> f(50)27.5

2 END

本文首发微信公众号:梯阅线条

更多内容参考python知识分享或软件测试开发目录。

标签: #pythonlocal