函数中变量的作用域
今天用函数的时候遇到了一个问题,后来总结了下:
函数中若对变量进行了初始化,则该变量为局部变量;若没有初始化而直接对该变量操作,则该变量为全局变量。一般这种情况出现在列表和字典的使用中。如:
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没有被修改。
那么什么时候需要将变量变成全局变量呢?可能在进行函数的递归时,或者有循环时。需要在函数外进行初始化,然后在函数中直接操作,作为全局变量使用。否则在递归过程中每次调用函数变量都进行了初始化,之前的结果没有保留。比如统计文件个数和大小那道题目。