Python变量及函数嵌套——第七天

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
发布了17 篇原创文章 · 获赞 55 · 访问量 4435
發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章