2018年11月15日 星期四

python - 函數總結

函數總結:



*函數的定義以及調用:


               def  函數名(形參) :
                                  函數體
                                  return 返回值


*調用  函數名(實參)
     關於  形參 :  位置參數,*args, 默認參數(陷阱問題),**kwargs
      關於  實參:   按照位置傳、按照關鍵字傳

#默認參數 陷阱 :  函数中的参数默认值是一个可变的list, 函数体内修改了原来的默认值,而python会将修改后的值一直保留,并作为下次函数调用时的参数默认值

*返回值 : 沒有返回值、返回一個值、返回多個值
        返回值的接收方法:  沒有返回值  >>>不接收
        返回一個值  >>>用一個變量接收
        返回多個值 >>>用一個變量接收或是對應的數目變量接收

*閉包函數   在內部函數引用外部函數的變量
*裝飾器
        裝飾器的作用:  再不改變原來的函數的調用方式的情況下,在這個函數的前後添加新的                                       功能。
      
       完美的符合了一個開發原則  : 開放封閉原則
                  1.對擴展的是開放的
                  2.對修改的是封閉的


1.基礎的裝飾器

#基礎的裝飾器def   wrapper(func):
    def inner(*args,**kwargs):
        ''' 在函數被調用之前添加的代碼'''        ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用        '''在函數被調用之後添加的代碼'''        return  ret
    return  input#使用 -- @wrapper
                    

2.完美的裝飾器
from functools  import wraps
#完美的裝飾器from functools import wraps
def   wrapper(func):
    def inner(*args,**kwargs):
        ''' 在函數被調用之前添加的代碼'''        ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用        '''在函數被調用之後添加的代碼'''        return  ret
    return  input#使用 -- @wrapper 

3.帶參數的裝飾器
  .@wrapper  >>@warapper(argument) 
  .三層嵌套函數
  #三層嵌套裝飾器.帶參數裝飾器
def outer(形參):
        def   wrapper(func):
            def inner(*args,**kwargs):
                ''' 在函數被調用之前添加的代碼'''                ret = func(*args,**kwargs) #func 是被裝飾的函數 在這裡被調用                '''在函數被調用之後添加的代碼'''                return  ret
            return  input        return  wrapper
@outer(True)
def func():
    pass

4.多個裝飾器裝飾一個函數
俄羅斯娃娃
def wrapper1(func):
            @wraps(func)
            def inner(*args,**kwargs):
                print('before 1')
                print('******')
                ret = func(*args,**kwargs)   # func是被装饰的函数 在这里被调用                '''在函数被调用之后添加的代码'''                return ret
    def wrapper2(func):
        @wraps(func)
        def inner(*args,**kwargs):
            print('before 2')
            ret = func(*args,**kwargs)   # func是被装饰的函数 在这里被调用            '''在函数被调用之后添加的代码'''            return ret
      @wrapper1      @wrapper2      def func():
          print('111')






沒有留言:

張貼留言