函数

一.函数的定义:

  对功能或者动作的装封.

  语法:

    def 函数名(形参)

    函数体

    函数名(实参)

  return:

    返回,谁调用就返回到哪

    1.函数中不写 return,返回 None

    2.只写了 return,也返回 None ,结束一个函数的运行

    3. return 值     代表:返回 一个值

    4.return 值1 值2 值3.....一次返回多个结果,打包成元祖返回

         参数:

     1.形参: 在函数声明的位置写的变量

      1) 位置参数

      2) 默认值参数

      3)动态传参

        聚合    接收位置参数的动态传参

        聚合    接收关键字参数的动态传参

      参数列表顺序:

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

      2.实参:函数调用的地方写的具体的值

       1) 位置参数

       2) 关键字参数

       3) 混合参数: 位置 > 关键字

         *  把列表,字符串 ,元祖 打散成位置参数

         **  把字典打散成关键字 参数

     命名空间: 我们的变量在存储的时候就是存储在这片空间中的

     名称空间

        1.内置名称空间 :存放python 解释器为我们提供的名字,list,tuple,str,int这些都是内置命名空间

        2.全局名称空间:我们直接在py文件中, 函数外声明的变量都属于全局命名空间

        3.局部命名空间:在函数中声明的变量会放在局部命名空间

     作用域:

        1.全局作用域: 全局空间空间 + 内置名称空间

        2.局部作用域: 局部名称空间

    globals() 查看全局作用域的名字

    locals() 查看当前作用域的名字

 

 

    global     在局部引入全局作用域的内容

    nonlocal   在局部,在内层函数中引入离他最近的那一层的变量

 一  第一类函数 - ->  函数名-->变量名

  1) 函数对象可以像变量一样赋值   2) 还可以作为列表的元素进行使用  3) 可以作为返回值返回  4) 可以作为参数进行传递

二  闭包 --> 函数的嵌套

      内层函数对外层函数中的变量的使用 

                 好处: 1) 保护变量不被侵害    2)  让一个 变量常驻内存

      如何通过代码查看一个闭包

      __closure__:  有东西就是闭包,没东西就不是闭包

三 迭代器 固定的思路:  for 循环

  一个数据类型中包含了__iter__函数表示这个数据是可迭代的

  dir(数据): 返回这个数据可以执行的所有操作

 

  判断迭代器和可迭代对象的方案(野路子)

  __iter__          可迭代的

  __iter__       __next__   迭代器

 

  判断迭代器和可迭代对象的方案(官方)

  from collections import Iterable, Iterator

  isinstance(对象,Iterable) 是否是可迭代的

  isinstance(对象,Iterator)是否是迭代器

 

  模拟for循环

  lst = []

  it = lst.__iter__()

  while 1:

    try:

      it.__next__()

    except StopIteration:

      break

  特征: 1) 省内存(生成器)    2) 惰性机制     3)  只能向前,不能后退          作用: 统一 了各种数据类型的遍历

 

    

 

posted @ 2019-01-14 14:55  会飞的草帽  阅读(93)  评论(0编辑  收藏  举报