• 我的python菜鸟之路8


    ----------------------------------作用域-----------------------------------------

    • 一个函数是一个作用域

    • 作用域内部数据独享,制造作用域之间的数据隔离,但是可以利用全局的数据(上下均可)>>>父级>>父级>>.....>>全局,全局没有便报错

    • 全局不能利用作用域的数据

      a = 1
      def funs():
          x = 666
          print(x)
          print(a)
          print(b)
      b = 2
      s = funs()
      #此时函数也可以利用b的值
      a = 1
      def funs():
          x = 666
          print(x)
          print(a)
          print(b)
      s = funs()
      b = 2
      #此时便不可以利用b的值
      
    • 函数内部可以调用函数,前提是被调用的函数在全局中被定义(函数中再嵌套函数则不可以)

    • def funs():
          x = 666
          print(x)
          def fun():
              print(555)
          print(999)
          fun()
      funs()
      #结果为
      666
      999
      555
      
    • 子作用域只能找到全局的数据,不能重新赋值

    • 但列表、集合、字典可被修改类的类型,能被子作用域在全局修改

      name=[1,2,3,4]
      def funs():
          name.append(55)
          print(name)
      funs()
      print(name)
      
    • 如果非要在子作用域对全局进行赋值可选用global语句(只用于全局)

    • name='杨子列'
      def funs():
          global name
          name = '扬子鳄'
      funs()
      print(name)
      
    • nonlocal,修改上一层的父级

    • ame='杨子列'
      def funs():
          name = '扬子鳄'
          def fun():
              nonlocal name
              name = 'yangziq'
              print(name)
          fun()
      funs()
      print(name)
      #结果为
      yangziq
      杨子列
      

      补充

      • 全局变量必须是大写(一个程序员的修养)
    • 作用域补充

    for item in range(10):
        pass
    print(item)
    #输出结果为:
    #9
    
    • 作用域补充
    item = 10
    def func():
        item = 2
        def inner():
            print(item)
        for item in range(10):
            pass
        inner()
    func()
    #结果为:
    #9
    

    作用域补充

  • 相关阅读:
    iOS开发-文件管理(一)
    浅析栈区和堆区内存分配的区别
    浅谈Block传值-匿名函数(代码块)
    cell的各种使用和赋值 总结
    类方法和对象方法的区别
    属性传值 ,代理传值,单例
    类目,延展,协议
    任意点 并查集
    Codeforces 145E. Lucky Queries 线段树
    Codeforces 103B. Cthulhu 并查集运用
  • 原文地址:https://www.cnblogs.com/yangzilaing/p/13193692.html
Copyright © 2020-2023  润新知