Python 变量的基本作用域规则是什么
变量根据其作用域的不同被分为全局变量和局部变量。全局变量和局部变量的主要区别在于, 全局变量 可以在整个程序中全局访问,而局部变量只能在定义它们的函数或代码块内部访问。
局部变量 是在函数内部定义的变量,它们的作用域仅限于该函数,而全局变量是在任何函数之外定义的,具有全局作用域。换句话说,我们可以说全局变量虽然在程序中和所有函数内部都可访问,但局部变量只能在初始化它们的函数内部访问。局部变量是在函数内部创建的变量,并且仅适用于该函数。它在函数外部的任何地方都不能访问。让我们来观察一下局部变量的创建。
Python中的局部变量
局部变量是一种特定类型的变量,当声明变量的方法或语句块定义了其作用域和范围时,可以使用它。for each语句将其用作迭代变量,特定的catch子句将其用作异常变量,using语句将其用作资源变量。
在声明它的方法或语句块中,它还可以用作一个值不可改变的常量。语言集成查询(LINQ)返回匿名类型,可以通过使用隐式类型的局部变量来处理,该隐式类型的局部变量的类型是由编译器从右边表达式推断出来的。这允许为每个LINQ结果集创建自定义类型。
示例
让我们看一个创建局部变量的示例。
def f():
#local variable
L = "Hello World"
print(L)
# Driver code
f()
输出
输出如下:
Hello World
全局变量
仅在将值赋给或更改函数内的全局变量时,我们需要使用global关键字。对于打印和访问,不需要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