zoukankan      html  css  js  c++  java
  • 三、名称空间

    • python分为三个空间:

      • 全局名称空间,当前的py文件

      • 局部名称空间,函数,函数执行时才开辟

      • 内置名称空间,builtins.py

    • 加载顺序,取值顺序

      • 加载顺序:内置名称空间——> 全局名称空间 ——>局部名称空间

      • 取值顺序(就近原则)(LEGB):单项不可逆

        (从局部找时)局部名称空间——> 全局名称空间——>内置名称空间

    • 作用域

      两个作用域:

      • 全局作用域:内置名称空间、全局名称空间

      • 局部作用域:局部名称空间

        • 局部作用域可以引用全局

        • 局部作用域不能改变全局作用域的变量,当Python解释器读取到局部作用域时,发现你对一个变量进行修改的操作,解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了

          

      • # 作用域:
        # 两个作用域:
           # 全局作用域 :内置名称空间 全局名称空间
           # 局部作用域:局部名称空间

        # 局部作用域可以引用全局作用域的变量
        # date = '周五'
        # def func():
        #     a = 666
        #     print(date)
        # print(a)
        # func()
        # print(a)

        # 局部作用域不能改变全局变量。
        # count = 1
        # # def func():
        # #     count += 2
        # #     print(count)
        # # func() # local variable 'count' referenced before assignment
        # 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作,
        # 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。

        # 使用可以,不能改变
        # def func():
        #     count = 1
        #     def inner():
        #         print(count)
        #     inner()
        # func()

        def func():
           count = 1
           def inner():
               count += 1
               print(count)
           inner()
        func()

         

    1. 函数的嵌套(高阶函数)

      # 例1:
      def func1():
         print('in func1')
         print(3)

      def func2():
         print('in func2')
         print(4)

      func1()
      print(1)
      func2()
      print(2)
      # in func1 3 1 in func2 4 2



      # 例2:
      def func1():
         print('in func1')
         print(3)

      def func2():
         print('in func2')
         func1()
         print(4)

      print(1)
      func2()
      print(2)
      #1 in func2 in func1 3 4 2


      # 例3:
      def fun2():
         print(2)

         def fun3():
             print(6)

         print(4)
         fun3()
         print(8)

      print(3)
      fun2()
      print(5)
      #3 2 4 6 8 5

       

    # 作用域:# 两个作用域:    # 全局作用域 :内置名称空间 全局名称空间    # 局部作用域:局部名称空间
    #  局部作用域可以引用全局作用域的变量# date = '周五'# def func():#     a = 666#     print(date)# print(a)# func()# print(a)
    # 局部作用域不能改变全局变量。# count = 1# # def func():# #     count += 2# #     print(count)# # func()  # local variable 'count' referenced before assignment# 局部作用域不能改变全局作用域的变量,当python解释器读取到局部作用域时,发现了你对一个变量进行修改的操作,# 解释器会认为你在局部已经定义过这个局部变量了,他就从局部找这个局部变量,报错了。
    # 使用可以,不能改变# def func():#     count = 1#     def inner():#         print(count)#     inner()# func()
    def func():    count = 1    def inner():        count += 1        print(count)    inner()func()

  • 相关阅读:
    元组,字典
    python字符串
    tensorflow 学习笔记
    tensorflow example1
    python第二章(2)列表
    python3.5学习第二章(1)标准库,bytes
    类加载过程
    数据值与地址值
    类的初始化与实例化顺序
    SpringCloudBus
  • 原文地址:https://www.cnblogs.com/yangzm/p/10921537.html
Copyright © 2011-2022 走看看