一、局部变量与全局变量
1. 例子:
name='lhf' def yangjian(): global name name='东方今典' print('我要',name) def shizhengwen (): global name name='sssssss' print('我要',name) yangjian() shizhengwen()
输出结果:
2.如果将上述代码yangjian()和shizhengwen()
颠倒顺序:
name='lhf' def yangjian(): global name name='东方今典' print('我要',name) def shizhengwen (): print('我要',name) shizhengwen() yangjian()
则根据“从上到下”的执行顺序,输出结果为:
3.总结例子:
例1:
name='产品经理' def yangjian(): global name #已经声明name=产品经理 是全局变量 print('我要搞',name) name='小东北' #修改全局变量为小东北 print('我要搞',name) def shizhengwen (): name='史政文' print('我要搞',name) yangjian() shizhengwen() #输出结果: #我要搞 产品经理 #我要搞 小东北 #我要搞 史政文
#如果函数的内容里面没有global关键字,优先读取里面的的局部变量,如果没有局部变量则只能读取全局变量。而且无法对全局变量进行赋值操作(如:name='史珍香'),
但是对于可变对象(如列表),
则可以对其内部元素进行操作,如(.append) #如果函数里面有global关键字,那么后面的name本质上就是全局变量,可以读取,可以赋值
例2:
如果函数的内容里面没有global关键字,优先读取里面的的局部变量,如果没有局部变量则只能读取全局变量。而且无法对全局变量进行赋值操作(如:name='史珍香'),
但是对于可变对象(如列表),则可以对其内部元素进行操作(如.append)
name=['产品经理','廖博士'] def qupengfei(): name.append('田振龙') print('我要搞',name) qupengfei()
输出结果:
二、全局变量、局部变量与函数的嵌套:
例1:
name='海风' def huangwei(): name='黄伟' print(name) def liuyang (): name='刘洋' print(name) def nulige(): name='沪指花' print(name) print(name) nulige() liuyang() print(name) huangwei() #输出结果: #黄伟 #刘洋 #刘洋 #沪指花 #黄伟
解析:!!!!!
例2:
name='刚娘' def weihou(): name='陈卓' def weiweihou(): global name name='冷静' weiweihou() print(name) print(name) weihou() print(name)
获得结果:刚娘,陈卓,冷静
例3:引入nonlocal ——代指上一级的变量:
name='刚娘' def weihou(): name='陈卓' def weiweihou(): nonlocal name #### name='冷静' weiweihou() print(name) print(name) weihou() print(name)
输出结果:刚娘,冷静,刚娘
三、简单的复习:
1.
name='alex' def change_name(): global name name='lhf' print(name) #输出结果:输出不了结果,但是不报错
2.
name='alex' def change_name(): global name name='lhf' print(name) change_name() #输出结果:lhf
3.
name='alex' def change_name(): global name name='lhf' print(name) def foo(): name='wu' print(name) foo() change_name() #输出结果:lhf # wu
4.
name='alex' def change_name(): global name name='lhf' print(name) def foo(): # name='wu' print(name) foo() change_name() #输出结果:lhf # lhf
在例4中,当foo执行的时候,发现自己的作用域之中没有name,于是按照顺序向上借name,离他最近的name就是change_name函数的作用域里面的规定的global name ‘lhf’,于是第二个打印的就是lhf!!!!
5.
name='alex' def change_name(): # global name # name='lhf' # print(name) def foo(): # name='wu' print(name) foo() change_name() #输出结果:alex
6.
name='alex' def change_name(): # global name # name='lhf' # print(name) name='aaa' def foo(): # name='wu' print(name) foo() change_name() #输出结果:aaa
7.
name='alex' def change_name(): # global name # name='lhf' # print(name) name='aaa' def foo(): # name='wu' nonlocal name print(name) foo() change_name() #输出结果:aaa
8.
name='alex' def change_name(): # global name # name='lhf' # print(name) name='aaa' def foo(): # name='wu' nonlocal name name='bbb' print(name) foo() change_name() #输出结果:bbb
9.
name='alex' def change_name(): # global name # name='lhf' # print(name) name='aaa' def foo(): # name='wu' nonlocal name name='bbb' print(name) foo() print(name) change_name() #输出结果:bbb # bbb