5.1 函数和lambda表达式

如下是李刚老师《疯狂python讲义》的学习笔记

如有侵权,联系删除

努力是信仰,坚持是脚步,代码改变世界!

定义函数:

    形式:>>>def 函数名(形参1,形参2):

           函数主体

          return  返回值1,返回值2

return返回值:可以返回值,也可以返回表达式,如

      >>>return  x if x>y else y

      若直接返回值,Python会自动将多个返回值封装成元组,当然也可使用多个变量接受函数返回的多个值,如

      >>>s,avg = my_def(my_list)

为函数提供解释文档:在自定义的函数中,同时协商'''   '''的注释,然后使用如下命令输出注释

          >>>pring(me_def._doc_)

          也可以使用如下命令得到注释

          >>>help(my_def)

神奇的递归调用函数:有一数列:f(0)=1,f(1)=4,f(n+2) = 2*f(n+1)+f(n),求f(10)的值

          >>>def fn(n):

             if n == 0:

              return 1

             elif n == 1:

              return 4

             else:

              return 2*fn(n-1)+fn(n-2)

          >>>print("fn(10)的结果是:",fn(10))

          当一个函数不断调用自身时,必须在某个时刻函数的返回值是确定的,即不再调用它自身,因此,在定义递归函数时:递归一定要向已知方向进行。

位置参数和关键字参数:如定义函数  >>>def my_def(width,height)

                          调用时:>>> my_def(3,4)    这种调用之后,相当于width=3,height=4,按位置给变量赋值就是位置参数

             调用时:>>>my_def(width=3,height=4),这种调用,就是关键字参数,直接指明赋值给哪个变量,

             从而,关键字参数可以交换位置,即可以my_def(height=4,width=3)

            关键字参数和位置参数混用时,规定:位置参数在前,关键字参数在后,

参数默认值:就是相当于当你没有给这个参数赋值时,它自己给自己赋个值,当你给它赋值时,它使用你赋的值,同样,位置参数在前,关键字参数在后

      >>>def say_hi(name,message='欢迎来到疯狂软件")

个数可变的参数:*形参   就是在调用函数时传入任意多个参数,python允许在形参前面添加一个*,多个参数值就被当作元组传入。

           >>>def test(*books,num)

                                       >>>test('疯狂','讲义',num = 1)

            这里就是说明一定要在形式上阻止*的作用,不然它就默认把所有值都赋给了*books了。

        **形参  这里是传入字典

                                      >>>def test(x,y,z=3,*books,**scores):

              print(x,y,z)

              print(books)

              print(scores)

          >>>test(1,2,"疯狂","讲义",语文=90,数学=97)

                                           1 2 疯狂

            (讲义)

            {'语文':90,'数学':94}

逆向参数收集:在个数可变的参数那里,是在定义函数那里使用了*,而这里是在调用时使用*,作用是,将该值分成一部分一部分的拆开赋给函数

        >>>def foo(name,*nums):

          print("name参数:",name)

          print("nums参数:",nums)

       >>>my_tuple = (1,2,3)

       >>>foo(*my_tuple)

                      name参数:1

                      nums参数:(2,3)

函数的参数传递机制:程序将参数传入函数,函数里被传入的参数怎么样不会影响程序中的参数,但是要注意字典,字典中key和value存入内存两个地方,将字典传

          入函数,函数中对复制品key的操作,会影响value的,,传入的是key

变量作用域:变量作用域感觉看不懂,这里局部变量和全局变量,感觉是对那些没有参数传入的函数使用的,使用python程序验证书上的,并没有出现书上的错误。????

局部函数:就是函数内再定义函数,默认情况下,函数内的函数只在该函数中有效

使用函数变量:相当于将函数赋给一个变量,这个变量相当于这个函数的新名字

                         >>>def  jia(a,b):

                                      c = a+b

                                      return c

                         >>> my_fun = jia

                         >>>print(my_fun(2,3))

使用函数作用函数形参:相当于把一个函数传入另一个函数,另一个函数操作时,也使用该函数的功能

            >>>def show(a):

              print(a)

            >>>def my_fun(data,fn):

               fn(data)

             >>>my_fun(2,show)

使用函数作为返回值:就是将函数中的函数的返回值返回

          >>>def get_math_func(type):

                                 def square(n):

                  return n*n

                                                 def cube(n):

               return n*n*n

               if type == "square":

                return square

               else:

               return cube

局部函数和lambda表达式:局部函数就是在函数内定义的函数,lambda就是将定义的单行函数进行简写

            形式:  lambda  [parameter_list]:表达式

            如: x = map(lambda x:x*x,range(8)) 

猜你喜欢

转载自www.cnblogs.com/tangmixun/p/12315062.html
5.1
今日推荐