#函数function

  • 什么是函数:
    函数是一段可执行的代码块,可以重复使用。
  • 函数的作用:
    1)划分功能模块,更好管理软件工程(协同开发);
    2)复用代码,减少开发工作量;
    3)提高代码阅读性,降低维护成本;
  • 函数的定义
    def functionName(list of parameters):
          ["注释"](可选)
          代码块,语句块
           return [返回值](可选)
  • 语法说明:
    1)def开头,后接函数标识符名称和圆括号();
    2)函数的命名规则与变量的命名规则一致;
    3)函数本身也是一个变量,该变量类型为可调用类型,属性为只读;
    4)函数有自己的命名空间,要让函数处理外部数据需要用参数给函数传入一些数据;       #涉及作用域概念
    5)参数列表放在圆括号内,逗号隔开,不写为空;
    6)语句块部分不能省略,如果为空语句,需要填充pass关键字
    7)不带表达式的return相当于返回None。
  • 实例:
    def add(a,b):
         return a+b
  • 函数调用:
    函数名(实参列表)
  • 调用说明:
    1)函数调用是一个表达式;
    2)如果没有return语句,函数执行完毕返回None值对象;
    3)如果函数需要返回其他的值对象需要用return语句;
    4)函数调用作为模块内部语句时,必须先定义函数,后调用函数;
  • 实例:
    a = add(10,20)
    print a
  • 函数的返回
  • 函数的参数传递:
    1)参数的传递方式:
    a、位置传参;               #sum(a,b,c);以形参的顺序,进行传参
    b、关键字传参;           #sum(b=1,a=2,c=3);   以形参赋值实参,可以打乱顺序,但是,在使用的时候,必须不可缺少关键                                           字,同时不可减少关键字。
    c、序列传参;              #序列类型,list,tuple,str,作为参数列表传递,要求为:序列的元素个数必须与参数的个数相同
                                           s1 = [1,2,3], myfun(*s1)   等同于   myfun(s1[0],s1[1],s1[2])   #myfun函数的形参有三个。
    d、字典关键字传参;     #实参和形参通过字典进行传递和匹配,字典的值传递给键对应的形参
                                            d1 = {"a":33,"b":23,"c":12}  myfun(**d1)   #ok,myfun(a,b,c):.....形参为三个
    e、综合传参                   #以上几种方法,混合使用。
  • 函数的缺省参数: 函数的形参如果被赋予默认参数值,那么该函数在调用时,如果对应的形参没有实参进行值传递,则使用默认值计算; 实例:
def info(name,age=1,addr = "不祥"):
                print("name",name,"age":,age,"addr":,addr)
            info("zhangsan")                          #name:zhangsan,age:1,addr:不详
            info("zhangsan",23,"beijing")       #name:zhangsan,age:23,addr:beijing
  • 缺省参数说明:
    缺省参数必须自右至左依次存在,如果一个参数有缺省值,其后后面的都要为缺省值
    应用广泛
  • 函数的不定长参数 两种:星号元组形参,双星号字典形参 1)星号元组形参: 语法:
def functionname(*tuplename):
                 statement
  • 实例:
def myfun(*args):
                print(args)
                for x in args:
                      print("参数":x)
            s = (1,2)
            myfun(*s)
  • 2)双星号字典形参 语法:
def functionname (**dictname):
                statement
  • 实例:
def myfun(**args):
                print("参数的个数:",len(args))
                for k,v in args.items():
                     print(k,">>",v)
            #diaoyong
             myfun(name="midu",age=15)
  • 3)介于上面二者间的,命名关键字形参: 语法:
def functionname (*,命名关键字形参名):
                 statement
            or
            def functionname (*args,命名关键字形参名):
                 statement
  • 注意:星号后面的参数必须使用关键字的传参形式,其关键字传递参数在实参列表中的位置是可变,但必须是关键字传参。
  • 函数的参数列表顺序: 位置形参,缺省参数,星号元组形参,双星号字典形参,命名关键字可以混合使用 函数参数自左至右的顺序为:      位置形参,星号元组形参,命名关键字形参,双星号字典形参,默认 实例:
• def fn(a,b,*args,c,**kwargs):
                 pass
            fn(100,200,300,400,c="C",d= "D,e="E")
  • 可变\不可变类型的实参的参数传递的区别
    可变类型:list,set,dict
    不可变类型:frozenset,tuple,str,numbers
    注意:可变,在改变其元素时,不释放对象的内存,不可变类型,在改变参数时,原先的实参会被释放,重新开辟空间,才可以重新进行传参。