哦, 天哪｡
屏幕上有一些代码, 看起来非常混乱｡
这是一个非常复杂的函数的例子, 你永远不会写出来, 但是它对于练习是很好的｡
我们在这里专门讨论这个叫做“非本地”｡
它实际上是Python 3中的一个新关键字｡
如你所见, 我的涟漪甚至没有注意到它｡
因此, 它甚至没有用蓝色突出显示它, 因为它是一个新功能｡
但我确实想和你谈谈它, 让你知道它的作用｡
非本地关键字用于引用此部分, 即此父本地｡
我们可以这样说, 嘿, 我想使用一个不是全局变量的变量, 但它在函数的作用域之外.
所以基于这个定义, 试着暂停视频, 看看这个函数会做什么｡
我现在就运行它然后再检查代码｡
如果我单击“运行”｡
这就是我们得到的｡
我们来谈谈这个吧｡
我们有一个外函数, 我们称之为外函数.
所以Python解释器会说, 好的, 我们有一个X变量, 它是外部函数的局部变量｡
然后在这里我们要定义一个内部函数, 另一个函数.
在这里, 在我们调用它之前, 我们跳到第九行, 说, 好吧, 调用内部函数｡
我们回来说, 嘿, 第5行, 我想用非本地X｡
那是什么意思？
我想使用这个x变量因为它是非本地的也就是说, 我不想创建一个新的x变量.
我想从作用域跳到我的父作用域, 我的本地父作用域, 然后获取在那里找到的任何内容｡
只要不是全局变量, 任何父变量都可以｡
我想抓那个外地人｡
现在x是指外部函数｡
所以当我们说x等于非局部的时候, 我们就是在给这个新字符串赋值｡
替换这个local, 这样当我们打印interx的时候,
我们得到的是非本地的, 但是当我们打印外部的x的时候, 我们已经用非本地关键字修改了这个外部作用域, 所以它也变成了非本地的｡
如果我删除这一行并将其注释掉, 然后单击“运行”｡
你看到区别了吗？
现在我们有了内部的非局部变量, 但是外部的局部变量还没有被修改, 因为这是一个新的变量｡
同样, 我认为这实际上会使代码变得比实际需要的更复杂｡
所以在一些特殊的情况下, 你可能会想使用这个, 但是如果你能让你的代码变得可预测的话,
你就可以避免使用非本地的和全局的｡
请注意, 它们存在是有原因的, 因为它们在某些情况下是有用的｡
尽管如此, 请记住, 让您的代码可预测, 让您的代码干净, 我将在下一个视频中看到您｡