• 函数的进阶


     临时名称空间
     name = 'alex'
     age = 12
     def funcl():
      name1 = 'wusir'
      age1 = 34
     funcl()
     #临时名称空间:临时名称空间,局部名称空间,存入函数里面的变量与值的关系,随着函数的执行结束,临时名称空间结束。

     名称空间:全局名称空间,局部名称空间,内置名称空间。
     作用域:全局作用域:全局名称空间,内置名称空间
       局部作用域:局部名称空间

     加载顺序,取值顺序。
     加载顺序:内置名称空间---》全局名称空间---》局部名称空间(函数执行时)
     取值顺序:
     局部--》全局--》内置
     
     globals #全局名称空间
     
     locals #
     
     关键字:global nonlocal
     局部可以用全局的变量 ,但是不能改变
     
     global 声明一个全局环境变量,在函数中修改全局变量。
     def funcl():
        global name
        name = 'alex'
        return
     funcl()
     print(name)

     
     nonlocal
     1.不能修改全局变量
     2.在局域作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
     
     def funcl():
     name1 = 'alex'
        print('+',name1)  #<--第一步
        def inner():
            nonlocal name1  #如果把这里去掉
            name1 = 'wusir'
            print('-',name1)
        inner() #<--第二步
        print('*',name1) #<--第三步
     funcl()

     输出结果
     + alex
     - wusir
     * wusir  #这里输出会变成 * alex
     
    函数名--既有还函数的功能,还有变量的功能
    1. 可以互相赋值
     def funcl():
      print(666)
     f1 = funcl
     f1()
     
     2. 可以当作函数的参数
     def func1():
      print(666)
      
     def func2(argv):
      args()
      print(777)

     666
     777
     
     3. 可以当成容器类数据类型的参数
     
     def func1():
      print(666)
     def func2():
      print(777)
     def func3():
      print(888)
     l1 = [func1,func2,func3]   #当成容器
     for i in l1:
      i()
     结果
     666
     777
     888
     
     4. 函数名可以当成函数的返回值
     def func1():
      print(666)
     def func2(argv):
      print(777)
      return argv
     ret = func2(func1)
     ret()
     结果
     777
     666

  • 相关阅读:
    CH6201走廊泼水节
    P3366 (模板)最小生成树
    linux 基础语法
    django 3.1 序列化讲述
    django 的基础设计
    django 的初始项目结构
    http
    mysql(一)
    反射型xss
    html(四)
  • 原文地址:https://www.cnblogs.com/liwei-python-21/p/8903939.html
Copyright © 2020-2023  润新知