‫好吧, 我们来玩个小游戏｡
‫你能猜出这个程序的输出是什么吗？
‫我这里有一个等于一的｡
‫然后我们创建了一个叫做confusion的函数, 这里我们有一个等于5的值, 我们返回a｡
‫我的问题是, 当我们打印A, 当我们打印混乱, 你期望这里发生什么？
‫如果你需要的话, 花点时间想想暂停｡
‫让我们来看看｡
‫一和五｡
‫这是你所期望的吗？
‫我们走吧｡
‫一行一行的｡
‫首先我们给变量A赋值1, 然后我们创建一个名为confusion的函数python解释器会说, 好的, confusion, function.
‫我知道那是什么｡
‫我要把它放在内存中｡
‫需要我帮忙的时候, 告诉我一声｡
‫然后它会转到第八行, 第八行会说, 嘿, 打印a是什么,
‫我唯一一次看到a是在这里, a等于1｡
‫进入内存, 假设A等于1｡
‫但当我像这样混乱的时候｡
‫我会说, 嘿, a会等于5现在我们返回A也就是5｡
‫OC如果我改变这个的顺序呢？
‫如果我这样走呢？
‫如果单击“运行”会发生什么情况？
‫这是你所期望的吗？
‫再一次, 我们有一个平等的｡
‫然后我们定义函数, 然后打印混乱｡
‫现在这里的混乱就是给a赋值等于5然后返回a.
‫但为什么这一点没有改变？
‫为什么我们到这里的时候a还是等于1？
‫这是因为范围, 对吗？
‫当Python解释器运行混淆函数的时候, 它会说, 嘿, a等于5｡
‫但我在我自己的宇宙中创造了一个变量A｡
‫我不知道什么是平等的｡
‫我有自己的世界｡
‫在我们运行这个函数之后, 我们就完成了｡
‫我们已经返回了函数, 但它完全消失了｡
‫但我们从未离开宇宙进入全球范围｡
‫所以Python解释器检查变量时需要遵循一系列规则｡
‫规则是这样的｡
‫首先, 它要和当地人核实一下｡
‫所以从本地开始｡
‫我们称之为局部作用域｡
‫局部作用域是这个局部函数的一部分｡
‫所以一个是局部范围｡
‫他会在那里过牌｡
‫我知道变量吗？
‫A嗯, 是的, 等我回来的时候｡
‫A我在这里定义了一个变量, 所以它从那里开始｡
‫但假设A不在那里, 假设我删除了a, 然后在这里单击运行｡
‫因为第二个规则是如果局部变量或局部作用域中没有任何内容, 那么第二个规则是,
‫是否有父局部作用域？
‫在我们的例子中, 这个函数的父级是什么？
‫这是全球范围的｡
‫但我们还可以做另一个功能｡
‫假设parent和parent是混淆函数的父项｡
‫在这里, 假设A等于10｡
‫现在在这里｡
‫我们会再来的｡
‫混淆只是为了让我们可以再次使用它, 并实际运行它｡
‫那我们打电话给家长吧｡
‫然后单击“运行”｡
‫好吧, 我们来看看｡
‫所以不会太混乱｡
‫我们有被调用的父函数｡
‫所以当我们调用它的时候, 我们给10赋一个等于｡
‫然后我们也创造了一个新的功能混淆｡
‫最后, 我们返回confusion并运行它｡
‫所以我们要返回a然后在这里打印出A的值, 也就是10.
‫为什么呢？
‫因为我们首先从局部范围开始｡
‫嘿, 混乱知道a是什么吗？
‫不知道｡
‫我的本地范围中没有它｡
‫OC我的父母当地学校有吗？
‫所以它会上一层, 问, 父函数知道a是什么吗？
‫是的, 我有一个等于10的, 所以它会打印出来｡
‫第三个规则或第三个顺序是全局性的｡
‫全局就是我们所说的无缩进｡
‫是这个文件, 对吧？
‫无论文件包含什么内容, 都是全局的｡
‫在我们的例子中, 如果A等于10这里不存在, 就没有局部变量, 也就没有父局部变量｡
‫然后单击“运行”｡
‫它检查全局范围｡
‫最后, 还有一条规则, 这是第四条, 这是一个棘手的规则｡
‫这就是我们所说的内置Python｡
‫或者内置的Python函数｡
‫所以Python自带了预定义的函数, 比如？
‫我们之前讨论过的那个数目｡
‫这有些让我们说, 只是给予它五｡
‫是要去检查还是实际上, 咱们什么都不给予它｡
‫我们就在这里做吧｡
‫当我运行这个｡
‫我有一些内在的功能｡
‫现在就去
‫他们怎么知道这是什么？
‫这个变数到底是什么？
‫因为它说, 嘿, 我在这个宇宙里面有一些吗？
‫不知道｡
‫我不知道｡
‫我的父范围中是否有一些？
‫不, 我不知道｡
‫我在全球有吗？
‫不知道｡
‫这里面没有任何东西｡
‫最后它要检查的是, 嘿, 是某种内置的Python函数吗？
‫是的｡
‫Python实际上给了我们一些, 这样你就可以使用它, 这样它就不会出错了｡
‫这就是Python解释器所遵循的作用域规则｡
‫非常, 非常酷｡
‫我们还需要学习一些东西｡
‫所以我们在下一个视频中再见｡