函数中变量的作用域

今天用函数的时候遇到了一个问题,后来总结了下:

函数中若对变量进行了初始化,则该变量为局部变量;若没有初始化而直接对该变量操作,则该变量为全局变量。一般这种情况出现在列表和字典的使用中。如:

a = 1
b = 1
list = []
dict = {}

def ch1():
b = a + 1

def ch2():
list.append(10)

def ch3():
dict[‘x’] = 1

ch1()
ch2()
ch3()
print(b)
print(list)
print(dict)

执行结果为:
1
[10]
{‘x’:1}

list 和 dict 的结果被修改了(b = a +1相当于也对b进行了初始化)

如果ch2()和ch3)()的定义改为

def ch2():
list = [1]
list.append(10)
return list #去掉也可以

def ch3():
dict = {‘y’:1}
dict[‘x’] = 1
return dict

则执行ch2()和ch3()后

运行结果为
1
[]
{}

list和dict没有被修改。

那么什么时候需要将变量变成全局变量呢?可能在进行函数的递归时,或者有循环时。需要在函数外进行初始化,然后在函数中直接操作,作为全局变量使用。否则在递归过程中每次调用函数变量都进行了初始化,之前的结果没有保留。比如统计文件个数和大小那道题目。

函数中变量的作用域