• 对函数的进一步了解


    1. 函数的参数

      • 形参角度:

        1. 动态参数

          当给函数传入的参数数目不定时,之前的传参方式解决不了问题.

          def chi(*args):   # 定义一个函数的时候,* 将实参角度所有的位置参数聚合到一个元组中.
              print('我请你吃:', args)
          chi('蒸羊羔', '蒸熊掌', '蒸鹿尾')
          
          def func(**kwargs): # 函数定义时,**将实参的所有的关键字参数聚合成了一个字典给了kwagrs
              print(kwargs)
          func(name='小明', age='18', hobby='唱跳rap篮球')
          
          def func(*args, **kwargs): # 万能参数
              print(args, kwargs)
          
        2. 形参的顺序:

          • 位置参数 => *args => 默认值参数 => **kwargs

          • 仅限关键字参数:

            在 *args 和 **kwargs 中间

    2. *的魔法用法

      def func(*args, **kwargs):
          print(args)
          print(kwargs)
      l1 = [1, 2, 3]
      l2 = ['小明', '小红', '小丽']
      dic = {'k1': 'v1', 'k2': 'v2'}
      func(*l1, *l2)  # 函数的执行时: * 代表打散
      func(**dic)     # 函数的执行时: ** 代表打散 (key不能是int型)
      
      函数外:
      a, b, *c = [1, 2, 3, 4, 5, 6] # 处理剩余元素,列表形式
      print(a, b, c)
      
    3. 命名空间与作用域

      1. 命名空间:

        • 全局命名空间:我们直接在py文件中,函数外声明的变量
        • 内置命名空间:python最开始会开辟一个自己的命名空间 -- 内置命名空间
        • 局部命名空间:函数内部声明的变量
        • 加载顺序: 内置命名空间 => 全局命名空间 => 局部命名空间
        • 取值顺序: 局部命名空间 => 全局命名空间 => 内置命名空间
      2. 作用域:

        • 作用域: 变量或函数的声明周期

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

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

          globals() # 查看全局作用域中的内容
          locals()  # 查看的是当前作用域中的内容
          
    4. 函数的嵌套

      # 函数可以互相嵌套:
      def outer():
          def inner():
              print('我是内部')
          print('我是外部')
          inner()
      outer()
      
    5. 拓展

      • global
        • 在局部作用域中可以更改全局作用域的变量(限于字符串,数字)
        • 利用global在局部作用域也可以声明一个全局变量
      • nonlocal
        • 不能更改全局变量
        • 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
  • 相关阅读:
    tomcat 部署项目的多种方式
    HttpServletRequestWrapper模拟实现分布式Session
    eclipse4.3 解决没有check out as maven project
    Mysql的Merge存储引擎实现分表查询
    ubuntu gcc低版本过低引起错误
    SpringMVC强大的数据绑定
    Reading Notes : 180212 冯诺依曼计算机
    Reading Notes : 180211 概述计算机
    Struts2 第六讲 -- Struts2的结果类型
    Struts2 第五讲 -- Struts2与Servlet的API解耦
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11045732.html
Copyright © 2020-2023  润新知