Python 变量的基本作用域规则是什么?
基于它们的范围,变量分为全局变量和局部变量。全局变量和局部变量的主要区别在于 全局变量 可以在整个程序中全局访问,而局部变量只能在它们被定义的函数或块内访问。
局部变量 是在函数内定义但其作用域仅适用于该函数的变量,与全局变量相反,后者在任何函数之外定义且具有全局作用域。换句话说,虽然全局变量可以在整个程序和所有函数内访问,但局部变量只能在初始化它们的函数内部访问。局部变量是在函数内部创建的变量,其只属于该函数。它不能在函数外的任何地方访问。让我们来看一下如何创建局部变量。
阅读更多:Python 教程
Python中的局部变量
局部变量是一种特殊类型的变量,当它声明的方法或语句块定义了变量的作用域和范围时可以使用。for each语句将其用作迭代变量,特定-catch子句将其用作异常变量,而using语句将其用作资源变量。
在声明它的方法或语句块中,它还可以用作值不可更改的常量。通过使用一个由编译器从其右侧表达式推导出类型的隐式类型局部变量来处理返回匿名类型的语言集成查询(LINQ)。这使得每个LINQ结果集可以创建一个自定义类型。
示例
让我们看个示例来创建一个局部变量。
def f():
#local variable
L = "Hello World"
print(L)
# Driver code
f()
输出
输出如下。
Hello World
全局变量
仅当在函数中分配值或更改全局变量时,我们才需要使用全局关键字。对于打印和访问,不需要使用global。由于在f()内部对s进行赋值,Python“假设”我们要一个局部变量,这就是为什么第一句会抛出错误的原因。如果在函数内修改或创建变量而没有将其定义为全局变量,则被视为局部变量。
示例
下面是创建全局变量并访问它的示例。
pi = 3.142
radius = 8
def circle():
#radius is a global varible
global radius
radius = radius * 2
area_of_circle = pi * (radius) ** 2
print("The area of circle is: ", area_of_circle)
circle()
输出
产生的输出如下。
The area of circle is: 804.352
封闭或非局部作用域
嵌套函数中指定的变量称为非局部变量。它表明该变量在范围上不能既是局部的又是全局的。nonlocal关键字用于生成非局部变量。内部函数嵌套在我们在以下代码中生成的外部函数中()。函数Inner()在outer()函数的范围内定义。对在inner()函数中声明的非局部变量进行的更改将反映在外部函数的输出中。
示例
以下示例演示用法
def Outer():
x = "local"
def Inner():
nonlocal x
x = "nonlocal"
print("inner:", x)
Inner()
print("outer:", x)
Outer()
输出
输出如下。
inner: nonlocal
outer: nonlocal