1. 动态参数
  位置参数的动态参数: *args

    动态接收参数的时候要注意: 动态参数必须在位置参数后面

    顺序: 位置参数, 动态参数*, 默认值参数

      例子:   

    def chi(a, b, *food, c="娃哈哈"):
      print(a, b, food, c)
    chi("香蕉", "菠萝") # 香蕉 菠萝 () 娃哈哈 默认值⽣生效
    chi("香蕉", "菠萝", "葫芦娃") # 香蕉 菠萝 ('葫芦娃',) 娃哈哈 默认值⽣生效
    chi("香蕉", "菠萝", "葫芦娃", "口罩") # 香蕉 菠萝 ('葫芦娃', '口罩') 娃哈哈 默认值生效

     注意: 这个时候我们发现所有的默认值都生效了. 这个时候如果不给出关键字传参. 那么你的默认值是永远都生效的.

  关键字参数的动态参数 : **kwargs
  顺序:
  位置 > *args>默认值 > **kwargs

    如果想接收所有的参数:
    def func(*args, **kwargs):
      print(args, kwargs)
    func("麻花藤","马晕",wtf="胡辣汤")

    动态参数的另一种传参方式:
    def fun(*args):
      print(args)
    lst = [1, 4, 7]
    fun(lst[0], lst[1], lst[2])
    fun(*lst) # 可以使用*把一个列表按顺序打散
    s = "臣妾做不不到"
    fun(*s) # 字符串也可以打散, (可迭代对象)

 

 在形参上*聚合, **聚合
  在实参上*打散, **打散

  在实参位置上给一个序列,列表,可迭代对象前面加个*表示把这个序列按顺序打散.
  在形参的位置上的* 表示把接收到的参数组合成一个元组
  如果是一个字典, 那么也可以打散. 不过需要用两个*
    def fun(**kwargs):
      print(kwargs)
      dic = {'a':1, 'b':2}
      fun(**dic)

  函数的注释:
  def chi(food, drink):
    """
    这里是函数的注释, 先写一下当前这个函数是干什么的, 比如我这个函数就是一个吃
    :param food: 参数food是什么意思
    :param drink: 参数drink是什么意思
    :return: 返回的是什么东西
    """
    print(food, drink)
    return "very good"

2. 命名空间和作用域
命名空间:
  1. 内置命名空间: python解释内部运行时的变量函数
  2. 全局命名空间: 我们在py文件中直接声明出来的变量,函数
  3. 局部命名空间: 在函数内部声明的变量和函数.(我们直接在py文件中, 函数外声明的变量量都属于全局命名空间)
作用域:
  1.全局作用域:内置+全局
  2.局部作用域:局部
    globals() 查看全局作用域中的名字
    locals() 查看当前作用域中的名字

  3. global和nonlocal
  global: 把全局变量拿到局部来用.
  nonlocal: 把离他最近的一层的变量拿过来.不会找全局

python 函数的进阶的更多相关文章

  1. 小学生都能学会的python(函数的进阶)

    小学生都能学会的python(函数的进阶) 1. 动态传参 形参: 1. 位置参数 2. 默认值参数 3. 动态传参 *args 动态接收位置参数 **kwargs 动态接收关键字参数 def fun ...

  2. Python函数的进阶

    一  函数的动态参数 *agrs  位置参数动态传参 *args  接收多个位置参数 def func(*args): print(args) func("女儿国","西 ...

  3. Python函数基础进阶

    函数参数的另一种使用方式 def print_info(name,age): print("Name: %s" %name) print("age: %d" % ...

  4. Python函数部分

    Python函数的初识 Python函数的进阶 Python中的闭包与迭代器 Python生成器/推导式/生成器表达式 Python内置函数二 (递归函数,匿名函数,二分法)

  5. python函数-函数进阶

    python函数-函数进阶 一.命名空间和作用域 1.命名空间 内置命名空间 —— python解释器 就是python解释器一启动就可以使用的名字存储在内置命名空间中 内置的名字在启动解释器的时候被 ...

  6. 第六篇:Python函数进阶篇

    在了解完了 Python函数基础篇之后,本篇的存在其实是为了整合知识,由于该篇的知识是否杂乱,故大家可以通过点开点连接直接进入其详细介绍,该篇主要大致的介绍一下几个知识点:  一.Python的迭代器 ...

  7. 第5章函数进阶 第5.1节 Python函数的位置参数、关键字参数精讲

    前面第二章简单介绍了函数定义的语法,经过后面一系列的学习,函数有必要再次介绍一下相关内容. 一.    关于函数的语法 1.    语法 def 函数名([参数]): 函数文档字符串 函数体      ...

  8. python基础——面向对象进阶下

    python基础--面向对象进阶下 1 __setitem__,__getitem,__delitem__ 把对象操作属性模拟成字典的格式 想对比__getattr__(), __setattr__( ...

  9. python基础——面向对象进阶

    python基础--面向对象进阶 1.isinstance(obj,cls)和issubclass(sub,super) isinstance(obj,cls)检查是否obj是否是类 cls 的对象 ...

随机推荐

  1. 设计模式之原型模式(php实现)

    github地址:https://github.com/ZQCard/design_pattern1.先了解什么是浅拷贝与深拷贝 //深拷贝:赋值时值完全复制,完全的copy,对其中一个作出改变,不会 ...

  2. 用js怎么控制submit提交表单

    需求: 1. 要在点击submit按钮的时候,弹出一个询问框,"你确定要修改?".如果按了"确定"那么就提交表单,否则就保留在原页面,既不提交不跳转. 2. 要 ...

  3. 常见java异常

    1. java.lang.NullPointerException(空指针异常)  调用了未经初始化的对象或者是不存在的对象 经常出现在创建图片,调用数组这些操作中,比如图片未经初始化,或者图片创建时 ...

  4. zookeeper启动错误 ---- Unable to load database on disk

    zk启动报错 解决办法,进入zkdata目录删除version-2下面的所有文件 参考: https://issues.apache.org/jira/browse/ZOOKEEPER-1546 [h ...

  5. 为集群配置Impala和Mapreduce

    FROM: http://www.importnew.com/5881.html -- 扫描加关注,微信号: importnew -- 原文链接: Cloudera 翻译: ImportNew.com ...

  6. Unity载入和内存管理机制

    Unity几种动态载入Prefab方式的差异: 事实上存在3种载入prefab的方式: 一是静态引用,建一个public的变量,在Inspector里把prefab拉上去,用的时候instantiat ...

  7. EffectiveJava(8)覆盖equals是要遵守的约定

    覆盖equals是要遵守的约定 1.覆盖种类: -类的每个1实例本质上都是唯一的 -不关心类是否提供了"逻辑相等"的测试功能(Random测试是否能随机相同数字) -超类已经覆盖了 ...

  8. Java 调用存储过程、函数

     一.Java调用存储Oracle存储过程 测试用表: --创建用户表 create table USERINFO ( username ) not null, password ) not null ...

  9. 字符串截取 及 substr 和 substring 的区别

    1..字符串截取 str.substr(0, 1) // 获取字符串第一个字符 str.substr(-1) // 获取字符串最后一个字符 str.charAt(str.length - 1) // ...

  10. apue学习笔记(第一章UNIX基础知识)

    总所周知,UNIX环境高级编程是一本很经典的书,之前我粗略的看了一遍,感觉理解得不够深入. 听说写博客可以提高自己的水平,因此趁着这个机会我想把它重新看一遍,并把每一章的笔记写在博客里面. 我学习的时 ...