python local函数_Python nonlocal

Python nonlocal使用教程

如果我们在

同样,如果我们在函数内部定义的变量,与局部函数定义的变量重名,那么也会发生局部函数的变量会隐藏函数内部的变量,这时候我们就需要使用 nonlocal

Python变量重名详解

语法

def func():

varname = val

def func_inner():

print(varname)

varname = val2

func_inner()

说明

首先,我们在函数 func 内部定义了一个局部变量 varname,并赋值为 val,同时,我们在函数 func 的局部函数 func_inner 中,首先打印变量 varname,接着再次给变量 varname 赋值。

最后,我们调用局部函数 func_inner,此时程序报错。因为,我们在局部函数 func_inner 里面定义的变量 varname 隐藏了函数 func 的局部变量 varname。

Python nonlocal解决变量重名

当函数内部定义的变量,与局部函数定义的变量重名时,我们可以在局部函数内部使用 nonlocal 关键字来说明,我们在局部函数使用的是局部变量,而不是再次定义一个内部函数的局部变量。

案例

Python局部变量和全局变量重名

Python 局部变量和全局变量重名

print("嗨客网(www.haicoder.net)")

def func():

site = "HaiCoder"

def func_inner():

print("In Func Site =", site)

site = "haicoder"

print("nonlocal Site =", site)

func()

程序运行后,控制台输出如下:

首先,我们在函数 func 内部,定义了一个局部变量 site,接着,我们在函数 func 里面,定义了一个局部函数 func_inner,同时,在局部函数 func_inner 里面,我们首先打印变量 site 的值,接着再次给变量 site 赋值。

最后,我们使用

Python局部变量和全局变量重名

Python 局部变量和全局变量重名

print("嗨客网(www.haicoder.net)")

def func():

site = "HaiCoder"

def func_inner():

print("In Func Site =", site)

site = "haicoder"

func_inner()

print("nonlocal Site =", site)

func()

程序运行后,控制台输出如下:

首先,我们在函数 func 内部,定义了一个局部变量 site,接着,我们在函数 func 里面,定义了一个局部函数 func_inner,同时,在局部函数 func_inner 里面,我们首先打印变量 site 的值,接着再次给变量 site 赋值。

最后,我们首先在函数内部调用函数 func_inner,接着再次调用函数 func,此时程序报错,理论上我们在 func_inner 函数里面第一次打印使用的应该是局部的变量 site,但实际上程序却把 func_inner 函数的第一次打印使用的变量定义为了局部函数里面的局部变量。

Python局部变量和全局变量重名

Python 局部变量和全局变量重名

print("嗨客网(www.haicoder.net)")

def func():

site = "HaiCoder"

def func_inner():

nonlocal site

print("In Func Site =", site)

site = "haicoder"

func_inner()

print("nonlocal Site =", site)

func()

程序运行后,控制台输出如下:

我们在局部函数内部,可以直接使用 nonlocal 关键字,表明我们在局部函数内部使用的变量是外部函数的变量,而不是我们先定义局部函数的局部变量。

Python nonlocal使用教程总结

如果我们在函数内部定义的变量,与局部函数定义的变量重名,那么也会发生局部函数的变量会隐藏函数内部的变量,这时候我们就需要使用 nonlocal 关键字来解决。

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值