Python';s功能范围

Python';s功能范围,python,scope,Python,Scope,我正在使用python并做以下工作 x = [1,2,3,4,5] def function1(): print(x) function1() 我想我会得到错误名称“x”未定义,但我没有,它会打印变量x,即使它未在函数中定义。为什么python允许我在函数内部使用函数外部定义的变量,即使它们具有不同的作用域?基本上,您将x设置为全局变量 x = "myString" function global(): print(x) // Global function notglo

我正在使用python并做以下工作

x = [1,2,3,4,5]

def function1():
  print(x)

function1()

我想我会得到错误
名称“x”未定义
,但我没有,它会打印变量x,即使它未在函数中定义。为什么python允许我在函数内部使用函数外部定义的变量,即使它们具有不同的作用域?

基本上,您将x设置为全局变量

x = "myString"

function global():
    print(x) // Global


function notglobal():
    y = "myOtherString"
    print(y) // Not Global

class myClass: 
    z = "notGlobal" // Not Global

    function printZ():
        print(z) // Global To class

print(z) // Not global so will error out

x
是全局的,这意味着所有函数都可以使用它。

我喜欢所提供的处理方法,它将所描述的行为与Javascript的变量提升进行比较(尽管博客使用了负面示例来演示).

因为Python使用嵌套的作用域。请阅读我的答案>如何选择全局变量?如果它在类/函数之外,请编辑它的全局变量,以便更好地解释答案?好了。应该更新我希望它能解释