1.局部变量:在子程序中运行的变量。在目前所学习的过程中,只有函数是子程序,也就是在函数中定义的变量,就是局部变量
2.全局变量。变量前没有缩进,应用于整个py文件的变量,全部都可以调用。
#自己将全局变量和局部变量比作上下级关系,
全局变量国家部分制作的法规,在全国通用,但是地方政府也可以针对法规根据自身进行修改,如果国家看中了某个地方法规,可以进行global,在全国进行推广试用。
在代码规范中,默认全局变量大写,局部变量小写。
name='yehaibin' def test1(): global name#声明引用全局变量 print(name) name='nishishiea ' print(name) def test2(): #name='xuzheng' print(name) test1() test2()
如上代码所示,全局变量name的值为'yehaibin'。执行tese1时。通过global name,国家政府认为这个name可以推广到全国,此时还没有对name进行更改,所以print的值是全局变量yehaibin,然后通过对全局变量进行推广,name的值改为nishieshiea,这是print就改变了。
test2时。打印的name是更改后的全局变量,所以
yehaibin
nishishiea
nishishiea
。。如果去掉name=xuzheng这个#,则test2的地方政府法规依旧有效,听从地方政府的,打印xuzheng
3.global的用法
如果函数内部没有global代码,则此时全局变量只能被调用,比如列表可以append,但是不能对其本身进行修改,
如果有global代码,则可以对全局变量本身进行调用和修改,修改是作用在全局变量本身的。
3.1 nonlocal的用法
和global类似,不过这个用法是上一级政府觉得地方政府的法规不错,对上一级政府的法规进行推广,
也就是说,对上一级的变量进行修改,只在上一级中适用。
4.函数即变量
在分析函数的调用时,可以将函数看做变量
a='123' b='alex' print(b) print(a) ---- alex 123
#11
def test1(): print(111) def test2(): print(222) test1() test2() -- 111 222 #222
def test1(): print(111) test1() def test2(): print(222) test2() -- 111 222 --- 此时函数可以运行 def test1(): print(111) test2() def test2(): print(222) test1() --- Traceback (most recent call last): File "C:/Users/brown/PycharmProjects/python_s3/day15/递归.py", line 3, in <module> test2() NameError: name 'test2' is not defined 显示test2没有被定义,报错
和变量类似,
def test1(): test2() def test2(): print(222) test1() ----
总之将函数的调用看做变量,其上下关系就一目了然。