函数中的变量¶

1. 局部变量¶


(1)局部变量,就是在函数内部定义的变量。
(2)不同的函数,可以定义相同名字的局部变量,而且这些同名局部变量在各自的函数中使用,相互间不会产生影响或冲突。
(3)局部变量的作用是为了实现在函数中临时保存数据需要而定义的变量。
例如,以下函数中的变量就是局部变量,代码如下:

In [1]:
def mul2():    
    a = 7    
    b = 9    
    c = a*b    
    print (c)

2. 全局变量¶

如果一个变量,既能在一个函数中使用,也能在其他的函数中使用,这样的变量就是全局变量,代码如下:

In [2]:
#第1章/hanshu.py
a = 10   #全局变量    
def test1():    
    a = 30    
    print('test1中的变量a的值:', a)    
    a = 70    
    print('test1中的变量a修改后的值:', a)    
def test2():    
    print('test2中的变量a的值:', a) 
    
test1()
test2()
test1中的变量a的值: 30
test1中的变量a修改后的值: 70
test2中的变量a的值: 10

如上述代码所示,第一行定义在函数外面的是一个全局变量。

注意,上述代码出现了全局变量和局部变量名字相同问题,即在函数test1中是局部变量。

如果全局变量的名字和局部变量的名字相同,那么函数中使用的是局部变量的,

记忆小技巧:强龙不压地头蛇。

此外,全局变量不仅能够在所有的函数中进行使用,我们也可以使用关键字global在函数中指定修改全局变量,代码如下:

In [3]:
#第1章/hanshu.py
a = 10   #全局变量    
def test1():    
    global a  
    print('test1中的变量a的值:', a)    
    a = 70    
    print('test1中的变量a修改后的值:', a)    
def test2():    
    print('test2中的变量a的值:', a) 
        
test1()
test2()
test1中的变量a的值: 10
test1中的变量a修改后的值: 70
test2中的变量a的值: 70

3. 可变/不可变全局变量¶

对于不可变的数据类型来说(数字、字符串、元组),如果不指定修改全局变量,就尝试在函数中定义全局变量会引起报错,代码如下:

In [4]:
#第1章/hanshu1.py
a = 1 #定义全局变量    
def f():  
    global a
    a += 1    
    print (a)    
f()  #执行函数 
2

在函数中不使用global声明全局变量时,不能修改全局变量的本质是不能修改全局变量的指向,即不能将全局变量指向新的数据。

对于不可变类型的全局变量来说,因其指向的数据不能修改,所以不使用global时无法修改全局变量。

对于可变类型的全局变量来说(列表、字典、集合),因其指向的数据可以修改,所以不使用global时也可修改全局变量,代码如下:

In [5]:
#第1章/hanshu.py
lst = [1,]    
def f2():    
    lst.append(7)    
    print (lst)    
f2()
[1, 7]
In [ ]: