Python 中的全局变量和局部变量


Python 全局变量是指未在任何函数内部定义并具有全局作用域的变量,而 Python局部变量是在函数内部定义的变量,其作用域仅限于该函数。换句话说,我们可以说局部变量只能在初始化它的函数内部访问,而全局变量可以在整个程序和每个函数内部访问。

Python 局部变量

Python 中的局部变量是在函数内部初始化的变量,并且仅属于该特定函数。无法在函数之外的任何地方访问它。让我们看看如何创建局部变量。

在 Python 中创建局部变量

定义和访问局部变量

  • Python3
def f():

    # local variable
    s = "I love Geeksforgeeks"
    print(s)


# Driver code
f()

输出

I love Geeksforgeeks

局部变量可以在函数外使用吗?

如果我们尝试在函数外部使用这个局部变量,那么让我们看看会发生什么。

  • Python3
def f():

    # local variable
    s = "I love Geeksforgeeks"
    print("Inside Function:", s)

# Driver code
f()
print(s)

输出:

NameError: name 's' is not defined

Python 全局变量

这些是在任何函数外部定义的并且可以在整个程序中访问的那些,即在每个函数的内部和外部。让我们看看如何创建 Python 全局变量。

在Python中创建一个全局变量

定义和访问 Python 全局变量。

  • Python3
# This function uses global variable s
def f():
    print("Inside Function", s)

# Global scope
s = "I love Geeksforgeeks"
f()
print("Outside Function", s)

输出

Inside Function I love Geeksforgeeks
Outside Function I love Geeksforgeeks

变量 s 被定义为全局变量,在函数内部和函数外部都使用。

注意:由于没有局部变量,因此将使用全局变量的值,但请确保局部变量和全局变量应具有相同的名称。

为什么我们在Python中使用局部变量和全局变量?

现在,如果在函数内部和全局都有一个同名的 Python 变量怎么办?现在问题来了,局部变量会对全局变量产生一些影响,反之亦然,如果我们改变函数 f() 内部变量的值会发生什么?它也会影响全球吗?我们通过下面的代码进行测试:

例子

如果在函数范围内也定义了具有相同名称的变量,那么它将仅打印函数内部给定的值,而不是全局值。

  • Python3
# This function has a variable with
# name same as s.
def f():
    s = "Me too."
    print(s)

# Global scope
s = "I love Geeksforgeeks"
f()
print(s)

输出

Me too.
I love Geeksforgeeks

现在,如果我们尝试更改函数内全局变量的值怎么办?让我们使用下面的示例来看看。

  • Python3
# This function uses global variable s
def f():
    s += 'GFG'
    print("Inside Function", s)


# Global scope
s = "I love Geeksforgeeks"
f()

输出:

UnboundLocalError: local variable 's' referenced before assignment

为了使上面的程序运行,我们需要使用Python中的“global”关键字。让我们看看这个全局关键字是什么。

全局关键字

如果我们想要进行赋值或更改全局变量,我们只需要在函数中使用global 关键字。打印和访问不需要全局。由于 f() 内部对 s 的赋值,Python“假设”我们需要一个局部变量,因此第一个语句会抛出错误消息。如果未将函数声明为全局变量,则在函数内部更改或创建的任何变量都是局部变量。为了告诉 Python,我们想要使用全局变量,我们必须使用关键字“global”,如以下示例所示:

示例 1:使用 Python 全局关键字

  • Python3
# This function modifies the global variable 's'
def f():
    global s
    s += ' GFG'
    print(s)
    s = "Look for Geeksforgeeks Python Section"
    print(s)

# Global Scope
s = "Python is great!"
f()
print(s)

输出

Python is great! GFG
Look for Geeksforgeeks Python Section
Look for Geeksforgeeks Python Section

现在已经没有任何歧义了。

示例 2:使用 Python 全局变量和局部变量

  • Python3
a = 1

# Uses global because there is no local 'a'
def f():
    print('Inside f() : ', a)

# Variable 'a' is redefined as a local
def g():
    a = 2
    print('Inside g() : ', a)

# Uses global keyword to modify global 'a'
def h():
    global a
    a = 3
    print('Inside h() : ', a)


# Global scope
print('global : ', a)
f()
print('global : ', a)
g()
print('global : ', a)
h()
print('global : ', a)

输出

global :  1
Inside f() :  1
global :  1
Inside g() :  2
global :  1
Inside h() :  3
global :  3

局部变量与局部变量的黑白差异 全局变量

比较依据 全局变量 局部变量
Definition 在函数外部声明 在函数内声明
Lifetime 它们在程序开始执行时创建,并在程序结束时丢失 它们在函数开始执行时创建,并在函数结束时丢失
Data Sharing 提供数据共享 它不提供数据共享
Scope 可以通过整个代码访问 只能在函数内部访问
Parameters needed 参数传递不是必需的 参数传递是必要的
Storage 编译器选择的固定位置 它们保存在堆栈中
Value 一旦值发生变化,它就会反映在整个代码中 一旦改变变量就不会影响程序的其他功能


原文链接:codingdict.net