Python 3.x使用nonlocal定义变量

Python 3新增了nolocal来声明变量。

语法:

nonlocal 变量名

一般情况下我们在函数内对变量赋值,那么变量会被认为是本地变量。

def getvar()
    v = 1
    return v

getvar()

v就是一个本地变量。有时我们想要定义一个函数外的变量,但这个变量也不希望它是一个全局变量。这种情况就可以考虑使用nolocal变量。

def incrementer():
    counter = 0
    def increment():
        nonlocal counter
        counter += 1
        return counter
    return increment

increment = incrementer()

increment()   # 1
increment()   # 2

counter被定义为一个nonlocal变量,nonlocal变量会被限定在它最近包含它的代码块,代码块里的函数都是可以使用它,这是有区别与global变量。

版权声明:著作权归作者所有。

相关推荐

Python定义全局变量

Python使用global指令来声明一个全局变量。示例globvar = 0 def set_globvar_to_one():     global globvar    # 在使用全局变量前,必须先声明为global    &nbs

Kotlin:类的定义

基本定义Kotlin使用关键词class定义类,如:class User { } 声明类主要包括三部分:类名:必选,类的名称,一般以大写字母开头。类头:可选,类头包括type parameter(如泛型),主构造(primary constructor)等。类体:可选,在Kotlin,类体是可选的,它有大括号{}括起来。类头和类体是可选的,一个最简单的类可

Shell:如何在awk脚本里使用变量

在awk里用变量最好的方法是使用-v选项。使用方式awk -v var= 单个变量~]$ v1="变量1" ~]$ awk -v var1="$v1" 'BEGIN {print var1}' 变量1 多个变量使用多个-v var=xxx来接收多个变量~]$&

Python 3按指定的元素分割列表

Python 3有多种方法可以用来分割列表。示例有以下列表li = ['a','b','c','.','aa','bb','cc','.','aaa','bbb','ccc'] 现需要按“.”分割列表。使用itertools.groupby>>>li = ['a','b','c','.','aa','bb','cc','.','a

Python 3检查空列表推荐的方式

空sequence(包括字符串,列表和元组)实际为false,我们可以根据这一点来检查空序列。这也是PEP 8推荐的方式。推荐:if not seq: if seq: 不推荐:if len(seq): if not len(seq):