Python之函数(四)函数的嵌套和global、nonlocal

函数的嵌套

  1. 函数的嵌套

    def func()
    	print(1)
        def f1():
            print(2)
        return f1()
    func()
    #结果为:1 2
    #不管在什么位置,只要是函数+()就是在调用此函数
    #函数调用执行后,函数体中开辟的空间就自动销毁了
    
  2. def func():
        a=1
        def foo():
            b=2
            print(b)
            print(a)
            def f1():
                print(b)
            return f1()
        return foo()
    print(func())
    #结果为:2 1 2  None 
    #print(func()) 输出func()的返回值 
    #如果 函数里没有此变量 就找上面那一层(即父子层)
    

  1. 函数的相互引用

    def func():
    	a=1
    	foo():
    	print(a)
    def foo():
    	b=2
    	print(b)
    func()
    #结果为:2 1
    

  1. def a():
    	a1=1
    	c()
    	print(c)
    def b():
    	b1=2
    	print(b1)
    def c():
    	c1=3
    	print(a)
    def run():
    	a()
    print(run())
    #结果为:
    #<function a at 0x0000024CE8801E18>
    #<function c at 0x0000024CE89DA950>
    #None
    

  1. def func():
    	a=1
    	def b():
    		print(a)
    def foo():
    	b=1
    	def z():
    		print(func)
    		print(b)
    	ret=z()
    	func()
    	return ret
    def run()
    	foo()
    print(run())
    #结果为:
    #<function func at 0x00000242CF281E18>
    #1
    #None
    

  1. def func(a):
    	foo(a)
    def foo(e):
    	b(e)
    def b(c):
    	print(c)
    	return 10
    print(func(5))
    #结果为:
    #5
    #None
    

4.5 global 及 nonlocal

  1. global(声明修改全局变量的值)

    a=10
    def func():
        global a  # 声明修改全局变量的值
        a += 1
        print(a)
    func()
    print(a)
    #结果为: 11 11
    
    a = 10
    def f1():
        a = 10
        def f2():
            a = 15
            def f3():
                global a
                a += 1
                print(a)  # 11
            print(a)  # 15
            f3()
        print(a)  # 10
        f2()
    f1()
    #结果为:10 15 11
    

  1. a=10
    def func():
        def f1():
            a=15
            def foo():
                nonlocal a
                a+=1
                print(a)
            foo()
            print(a)
        f1()
    func()
    print(a)
    #结果为:16 16 10
    

  1. 总结:

    #global:修改全局空间的变量对应的值
    #nonlobal:在外层的函数中,修改局部空间的变量值,完全不涉及全局变量
    #nonlobal只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
    
posted @ 2019-08-26 21:32  __张达达  Views(211)  Comments(0Edit  收藏  举报