1、全局变量和局部变量、上一级变量、
(1)全局变量特点:顶格写的,没有缩进,在任意位置都可以调用。
(2)局部变量特点:在任意一个子程序(函数)里定义的,只在该子程序(函数)内生效。
(3)可以在一个程序中存在相同名称的局部变量和全局变量,这样的话,在哪里打印则输出哪个变量。示例如下:
name = "ZHM"
def test():
name = "LLL"
print(name)
test()
print(name)
#输出结果:
LLL
ZHM
(4)如果想直接在子程序里修改全局变量,应该加关键字global,如下:
name = "ZHM"
def test():
global name
name = "LLL"
print(name)
test()
print(name)
#输出结果:
LLL
LLL
(5)由于程序从上到下执行,所以上面的程序修改全局变量后,下面引用的全局变量也跟着修改。
name = "ZHM"
def test1():
global name
name = "LLL"
print(name)
def test2():
print(name)
test1()
test2()
#输出结果:
LLL
LLL
换一下执行顺序就会不一样,如下:
name = "ZHM"
def test1():
global name
name = "LLL"
print(name)
def test2():
print(name)
test2()
test1()
#输出结果:
ZHM
LLL
(6)先找自己的作用域(偷懒方法:可以看空格),没有引用全局;修改全局则用global;如果全局是可变类型,可以直接使用对应方法,对内部元素进行操作。如下:
name = ["ooo","lll"]
def test():
global name
name.append("ZHM")
print(name)
test()
#输出结果:
['ooo', 'lll', 'ZHM']
(7)为了防止重名,建议书写规范:全局变量都大写,局部变量都小写。
(8)上一级变量关键字nonlocal,和global类似。
2、函数嵌套
(1)代码默认执行顺序:从上到下
嵌套函数执行顺序:先执行外循环,再执行内循环
def outer():
def inner():
print('inner')
print('outer')
inner()
outer()
print("ooo")
#输出结果:
outer
inner
ooo
备注:但是好像为了避免不必要的麻烦,一般直接调用,不用函数嵌套
def inner():
print('inner')
def outer():
inner()
print('outer')
outer()
#输出结果:
inner
outer
(2)先定义后执行,未定义执行会报错。
def test1():
print("test1")
test2() #由于在这之前未定义过test2()
test1()
def test2():
print("test2")
#输出结果:
报错
3、关于函数名
(1)函数名可以进行赋值
def test():
print("123")
new_test = test
new_test()
#输出结果:
123
4、闭包函数特点
1、是嵌套函数
2、返回一个调用外部变量的函数对象
举例如下:
def outer():
name="Python"
def inner():
print(name)
print(inner.__closure__)
return inner
inn = outer()
inn()
#输出结果:
(<cell at 0x0000021B7492AB88: str object at 0x0000021B748F5670>,)
Python