zoukankan      html  css  js  c++  java
  • 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只修改离它最近的一层,最近的一层没有变量继续向上找,直到找到最外层函数
      
  • 相关阅读:
    数据库的左右表连接
    数据库索引-索引的优点、缺点、分类、不走索引的情况
    selenium中日期控件的操作方法
    esdoc 自动生成接口文档介绍
    css设置背景图(背景图太大导致图片显示不全)
    k8s调度器及调度队列源码分析
    MIT6.824 2020 Lab1 MapReduce 实现
    git命令
    python3.6、3.9多版本安装共存
    使用蓝鲸平台登录态验证接入第三方系统
  • 原文地址:https://www.cnblogs.com/zhangdadayou/p/11415161.html
Copyright © 2011-2022 走看看