1. 函数: 封装一个功能
               
               |def    my_len(形参):         ->  def  声明定义一个函数   my_len 函数名命名规则同变量
               |     
               |      ······                      
               |      ······          ->      ······ 函数体,书写代码实现所要的功能
               |      ······          ->      在函数体内使用形参进行操作,可对外部可变数据类型变量做内部修改
               |      ······                         
               |      return  x            ->      在此遇到 return 即返回,后面的不执行
               |      ······
               |            
               |my_len(实参)               ->      此处执行函数,即调用函数  需要先声明定义,再调用     格式: 函数名 + () 
                
                      传参:         
my_print(‘123‘, ‘abc‘, ‘撒旦’) 位置传参, 即依据(具体实参值)一一对应传递给形参
                     my_print(b=‘123‘, c=‘abc‘, a=‘撒旦’)               关键字传参,即依据(形参名)传递实参 
                     my_print(‘123‘, b=‘abc‘, c=‘撒旦’)                 混合传参,  即(关键字传参)必须全部在(位置传参)后面。
                      默认参数: 
def my_print(a,b,c=None,d={}) 设有默认值的形参 必须全部在 无默认值的形参 后面。
关于在函数内部,引用外部的(可变数据类型的变量list,dict)与引用外部的(不可变数据类型的变量如int,str)的区别:
                      参考:https://www.cnblogs.com/kayb/p/7194006.html
(不能改变全局变量的指向。)
  
   再强调一遍,if  i  is  {} : 这样的比较,is比较的是内存地址,适用于小数据池。字典,列表等可变数据类型,无小数据池。