1 变量
1.1 变量的分类
全局变量:
作用于全局,永久保存,既能一个函数中使用又能同时在其他函数中使用
局部变量:
作用于函数内部,不同函数可以定义相同名字的局部变量,但是各个之间不会
产生相互影响。为了临时保存数据需要在函数中定义变量来进行存储,节省内存的消耗
函数运行后就不存在了。
1.2 全局变量与局部变量名字相同时----就近原则
a=100
def foo1():
a=200
print(a) #200
def foo2():
a=300
print(a) #300
def foo3():
print(a) #100
print('*****1*****')
print(a)
print('*****2*****')
foo1()
print('*****3*****')
foo2()
print('*****4******')
foo3()
结论:根据以上代码,我们发现,当函数中有名字相同的局部变量时,函数中返回局部变量的值,当函数没有名字相同的局部变量时,函数中返回全局变量的值。在函数外调用变量时,直接返回全局变量的值。
1.3 修改全局变量
对于全局变量的修改,根据位置的不同,以及变量类型的不同,有不同的修改方式。
1.3.1 在函数外修改时
对于函数外即全局变量的位置,直接可以进行修改,例如:
a=100
a=200
print(a) #a=200
1.3.2 在局部变量的位置即在函数中进行修改时,具体的要看全局变量的类型
全局变量分为可变类型和不可变类型。在python中一共有6中数据类型。其中可变类型为:列表(list),集合(set),字典(dict)。不可变类型:数字(number),字符串(string),元组(tuple)。在局部位置修改可变类型的全局变量时,要保证该位置的变量是全局变量而不是名字相同的局部变量,可以将全局变量作为参数传递给对应函数。具体做法请参考代码(见下方)。
(1)对于不可变类型的修改,要在函数中使用global
在函数中不使用global声明全局变量时不能修改全局变量,其本质:不能修改全局变量的指向,既不能使那个全局变量指向新的数据
a=1
def demo4(a):
a += 1#a = a + 1
print(a)
demo4(a) #2
print(a) #1 直接修改无法实现
a = 1
def demo4():
global a
a += 1#a = a + 1
print(a)
demo4() #2
print(a) #2 用global可以实现修改
(2)对于可变类型的修改,可以直接进行
cc = [1,2]
def demo2(cc):
cc += cc
print(cc)
demo2(cc) #[1,2,1,2]
print(cc) #[1,2,1,2]
当然,用global也可以实现
cc = [1,2]
def demo2():
global cc
cc += cc #cc = cc+cc [1,2,1,2]
print(cc)
demo2() #[1,2,1,2,]
print(cc) #[1,2,1,2]
结论:变量分为不可变和可变两种,两者都可以用global进行修改。对于可变类型还可以直接以传参形式进行修改。