zoukankan      html  css  js  c++  java
  • 函数2

    一、函数对象

    1.1 第一类对象概念

    1. 可在运行期创建
    2. 可用作函数参数或返回值
    3. 可存入变量的实体

    1.2 函数对象的四大功能

    1. 引用

      def func():
          pass
      
      f = func
      print(f)
      
      <function func at 0x000002765A812E18>
      
    2. 当做参数传给一个函数

      def func():
          print('abc')
      
      def foo(x):
          x()
      
      foo(func)
      
      abc
      
    3. 当做函数的返回值

      def func():
          pass
      
      def foo(x):
          return x
      
      res = foo(func)
      print(res)
      
      <function func at 0x0000028A692A2E18>
      
    4. 当做容器类型元素

      def func():
          print('abc')
      
      function_list = [func]
      function_list[0]()
      

    二、名称空间和作用域

    2.1名称空间

    定义:内存中的储存变量名与变量间绑定关系的空间。

    1. 内置名称空间

    作用:存放python解释器自带的名字。

    生命周期:解释器启动时生效,关闭时失效。

    2. 全局名称空间

    作用:除了内置和局部的名字之外,其余都存放在全局名称空间。

    生命周期:文件执行时生效,文件执行结束后失效。

    3. 局部名称空间

    作用:存放函数调用期间函数体产生的名字。

    生命周期:文件执行时函数调用期间生效,函数执行结束后失效。

    4. 加载顺序

    内置(程序运行前加载)>>>全局(从上到下加载)>>>局部(调用时加载)

    5. 查找顺序

    局部>>>全局>>>内置

    x = 1
    def func():
        print(x)
    
    x = 10
    func()
    
    10
    

    2.2 作用域

    定义:作用的区域

    注意:

    • 作用域关系在函数定义阶段就固定了,与函数调用无关。

    • 在局部想要修改全局的可变类型,不需要任何声明,可以直接修改。

    1. 全局作用域

    全局有效,全局存活,包含内置名称空间和全局名称空间。

    x = 1
    def bar():
        print(x)
        
    bar()
    
    1
    

    2. 局部作用域

    局部有效,临时储存,只包含局部名称空间

    def f1():
        def f2():
            def f3():
                print(x)
            x = 2
            f3()
        f2()
    
    
    f1()
    
    2
    

    3. global和nonlocal

    • global
    # 修改全局作用域中的变量
    x = 1
    
    def f1():
        x = 2
        def f2():
            global x  # 修改全局
            x = 3
        f2()
    
    f1()
    print(x)
    
    3
    
    • nonlocal
    # 修改局部作用域中的变量
    x = 1
    def f1():
        x = 2
        def f2():
            nonlocal x
            x = 3
        f2()
        print(x)
    
    f1()
    
    2
    

    三、函数嵌套

    # 求四个数中的最大值
    
    def max2(x,y):
        m  = x if x>y else y
        return m
    
    def max4(a,b,c,d):
        res1 = max2(a,b)
        res2 = max2(res1,c)
        res3 = max2(res2,d)
        return res3
    
  • 相关阅读:
    电脑页面放到手机显示时,遇到了一个奇怪的问题:字体的显示大小,与在CSS中指定的大小不一致
    Win 7 安装VMware Workstation Pro 14出现 “Intel VT-x禁用”问题以及“无法连接 MKS: 套接字连接尝试次数太多;正在放弃”问题的实质性解决
    linux下文件权限777了,file_put_contents()却不能写入,为什么?
    Linux常用命令版本CentOS7.x
    sqlserver阻塞
    深入理解sqlserver日志-01
    CentOS添加和删除用户
    root修改sudoers文件
    linux常用命令-持续更新
    CentOS虚拟机设置IP
  • 原文地址:https://www.cnblogs.com/binyuanxiang/p/11559423.html
Copyright © 2011-2022 走看看