作用域、局部和全局变量 前向引用: def test(name,age=18,*args,**kwargs):
print(name)
print(age,args,kwargs)
school("Test") #程序执行从上到下的,这里的school还没定义,所以执行报错。
test('alex',age=20,flag="F",water=1.5) def school(source):
print(source) 运行结果: 报错NameError: name 'school' is not defined 正确写法: def test(name,age=18,*args,**kwargs):
print(name)
print(age,args,kwargs)
school("Test") def school(source):
print(source)
test('alex',age=20,flag="F",water=1.5) 运行结果:
alex
20 () {'flag': 'F', 'water': 1.5}
Test 局部变量(只在函数里生效,这个函数就是这个变量的作用域) def logers(name):
print('before change:',name)
name='ALEX'
print('after change:',name)
age=23
name='alex'
logers(name)
print(name)
print(age) #这里报错,NameError: name 'age' is not defined,,age属于局部变量,只能在局部生效。 运行结果:
before change: alex
after change: ALEX
alex 全局变量(在顶层,第一级定义的变量都是全局变量)
school='Oldboy'#顶层定义全局变量 def logers(name):
school="Mage"#局部变量
print('before change:',name,school)
name='ALEX'
print('after change:',name)
age=23
name='alex'
logers(name)
print(name) #print(age)
print(school) 运行结果:
before change: alex Mage #局部变量优先,虽然内部变了,但是全局变量还是没变。
after change: ALEX
alex
Oldboy #全局变量 改全局变量 不要这么用1:
school='Oldboy' def logers(name): global school #我要把函数的全局变量改了
school="Mage"
print('before change:',name,school)
name='ALEX'
print('after change:',name)
age=23
name='alex'
logers(name)
print(name) #print(age)
print(school) 运行结果:
before change: alex Mage
after change: ALEX
alex
Mage 总结: