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

📅  最后修改于: 2022-05-13 01:54:55.872000             🧑  作者: Mango

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

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

局部变量

局部变量是那些在函数内部初始化并且仅属于该特定函数的变量。它不能在函数之外的任何地方访问。让我们看看如何创建一个局部变量。

示例:创建局部变量

Python3
def f():
     
    # local variable
    s = "I love Geeksforgeeks"
    print(s)
 
# Driver code
f()


Python3
def f():
     
    # local variable
    s = "I love Geeksforgeeks"
    print("Inside Function:", s)
 
# Driver code
f()
print(s)


Python3
# This function uses global variable s
def f():
    print("Inside Function", s)
 
# Global scope
s = "I love Geeksforgeeks"
f()
print("Outside Function", s)


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)


Python3
# This function uses global variable s
def f():
    s += 'GFG'
    print("Inside Function", s)
 
# Global scope
s = "I love Geeksforgeeks"
f()


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)


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)


输出
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

全局变量

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

示例:定义和访问全局变量

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 被定义为全局变量,既可以在函数函数使用。

注意:由于没有局部变量,因此将使用全局变量的值。

现在,如果有一个同名的变量在函数内部以及全局初始化怎么办。现在问题来了,局部变量是否会对全局变量产生一些影响,反之亦然,如果我们在函数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

为了使上述程序正常工作,我们需要使用“global”关键字。让我们看看这个全局关键字是什么。

全局关键字

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

示例 1:使用全局关键字

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:使用全局变量和局部变量

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