闭包 (全局变量与局部变量)

报错:UnboundLocalError: local variable 't' referenced before assignment

在 Python 中,如果一个函数使用了和全局变量相同的名字且改变了该变量的值,那么该变量就会变成局部变量,

那么就会造成在函数中我们没有进行定义就引用了,所以会报该错误。

引用全局变量,并在函数中对它进行修改:

我们在开发中能尽量避免使用全局变量的就尽量避免使用。
因为不同模块,不同函数都可以自由的访问全局变量,可能会造成全局变量的不可预知性。
比如程序员甲修改了全局变量 t 的值,
然后程序员乙同时也对 time 进行了修改,如果其中有错误,这种错误是很难发现和更正的。

这时候使用闭包:

这里最直接的表现就是全局变量 t 至此至终都没有修改过,
这里还是用了 nonlocal 关键字,表示在函数或其他作用域中使用外层(非全局)变量。

这种内部函数的局部作用域中可以访问外部函数局部作用域中变量的行为,我们称为:闭包。
更加直接的表达方式就是,当某个函数被当成对象返回时,夹带了外部变量,就形成了一个闭包。

posted @ 2020-07-24 14:14  半日闲1  阅读(622)  评论(0编辑  收藏  举报