8月29日学习内容整理:函数参数,函数嵌套

补充:

1、函数要加注释,在定义下面

2、函数的作用:解决代码冗余;提高代码可读性;提高代码重用性;增强代码可扩展性

3、解耦:把大功能拆解成几个小功能,并且功能与功能之间的影响尽量见到最小;不宜把一个很复杂的功能写在一个函数里

一、参数

1、从函数定义的角度上:

(1)位置参数    (a,b)   (1,2) 1对应a,2对应b

(2)关键字传参   (a,b)   (a=1,b=2)

(3)位置和关键字混用的话必须按照先位置再关键字的顺序传递参数

2、从函数调用的角度上:

(1)按位置传参:必须要传

(2)默认参数:a) 是可以不传的,默认传递的就是设置值

         b)  若传递,则变为传入的值

         c) 默认参数为不可变数据类型:默认参数的值是函数定义(或者是函数定义上面的代码赋值的)时就确定下来的,不会随着外部代码对参数的改变而导致函数内部                        参数的改变

           d) 默认参数为可变数据类型(陷阱,要格外注意):这时候参数的值会随着函数的多次调用而发生改变,但要注意的是外部代码对参数的修改依然不会对函数内部                                                                                                              参数产生影响

(3)动态参数:传递多少个参数不知道的情况下

  (a) 只针对按位置传参:1、*args   接受按位置传递过来的所有参数,组织成一个元组,*在定义角度上理解为把元素聚合为元组

              2、把一整个列表传过来,需要在列表前面加上  *表示打散(函数调用角度)

  (b) 只针对按关键子传参:1、 **kwargs    接受按关键字传递过来的所有参数,组织成一个字典,**在定义角度上理解为把关键字参数聚合为字典

               2、把一整个字典传过来,需要在字典前面加上  **  也表示打散(函数调用角度)

  (c) 特殊现象:当把元组、字典打散经函数聚合返回后还是原来的元组、字典

(4)三种参数混用的话必须按照     位置参数、*args、默认参数、**kwargs    的顺序

 

二、函数嵌套

1、嵌套调用:外部函数定义里调用了一个内部函数,当外部函数被调用时内部函数也会被调用执行

2、嵌套定义:

(1)函数定义里又定义了一个内部函数

(2)要想内部函数也被执行,则要在外部函数里定义完后再调用内部函数

(3)新函数如果有参数,为了让它顺利执行,外部函数和调用内部函数的参数都用*args  **kwargs表示,这样在调用外部函数时就可以直接传入内部函数需要的参数
举例:注意此种用法外部函数只是起传递作用,所有就用动态参数涵盖所有可能的参数就行了

def func(*args,**kwargs):
    print(args)  #(1,2)   --> 1,2,3
    print(kwargs)  #{'c': 3}
    def func_inner(a,b,c):
        print('func_inner',a,b,c)
    func_inner(*args,**kwargs)

func(1,b = 2,c = 3)

(4)作用:为了某些有特定功能的函数不被随意调用

                

 

posted @ 2017-08-29 14:16  九二零  阅读(99)  评论(0编辑  收藏  举报