zoukankan      html  css  js  c++  java
  • 对函数的进一步了解

    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
        • 不能更改全局变量
        • 在局部作用域中,对父级作用域(或者更外层作用域非全局作用域)的变量进行引用和修改,并且引用的哪层,从那层及以下此变量全部发生改变。
  • 相关阅读:
    修改数据库的兼容级别
    如何写出安全的API接口
    最新IP地址数据库
    java 中的静态(static)代码块
    Java RTTI(类型信息)(.class 类对象)
    机器学习之决策树预测——泰坦尼克号乘客数据实例
    敏捷开发 —— TDD(测试驱动开发)
    Java 内存泄漏
    红顶商人 —— 胡雪岩
    各地特色美食与点菜的艺术
  • 原文地址:https://www.cnblogs.com/zyyhxbs/p/11045732.html
Copyright © 2011-2022 走看看