python函數的正式參數類型、參數組合、函數的做用域、匿名函數、filter()過濾器、map()

調用函數時可以使用的正式參數類型python

  • 必選參數:形參和實參一一對應(個數,數據類型,順序)
  • 形參:定義方法時的參數
  • 實參:調用方法時的參數
  • def fun1(a,b):#形參
        '''
        :param a:#第一個加數
        :param b:#第二個加數
        :return:#a+b的和
        '''
        return a+b;
    h=fun1(3,3);#實參
    print(fun1.__doc__);
    print(h);
  • 默認參數:(缺省參數)缺省參數必須寫在後面,能夠不指定參數名,可是順序要保證,不然要指定參數名
  • def fun1(a,b=5):#b=5爲默認值
        '''
        :param a:
        :param b:
        :return:
        '''
        return a+b;
    h=fun1(3);#未填寫參數值時。識別默認值
    print(fun1.__doc__);
    print(h);
  • def printinfo( name, age = 35 ):
     "打印任何傳入的字符串"
     print ("名字: ", name);
     print ("年齡: ", age);
     return;
    
    printinfo('ok');
  • 關鍵字參數:關鍵字參數容許你傳入0個或任意個含參數名的參數,這些關鍵字參數在函數內部自動組裝爲一個dict
  • 關鍵字參數:**kw
  • def student(name,age,**kw):
        print('姓名{} ,年齡{} other:{}'.format(name,age,kw));
    student('ok',30,xingqu='學習',aihao='運動');
    
    dic={'一':123,'二':223,'三':323};#當須要傳入多個鍵值的形式時,可經過字典形時傳遞
    student('ok',30,**dic);
  • 命名關鍵字參數:name=value
  • def show(name,age,sorce=90):#一旦以name=value的傳參數的形式存在  之後都要以這種形式存在
        print('姓名:{} 年齡:{} 成績:{}'.format(name,age,sorce));
    show('ok',30);
    show(name='ok',age='30',sorce=80);
    show(name='ok',sorce=80,age='30');#name=value的傳參數的形式 不要求順序
    #show(name='ok',name='30',sorce=80);#報錯('OK',sorce=30,age=30) ,後者不能重複以name=value賦值
  • 不定長參數(可變參數):可變參數容許你傳入0個或任意個參數,這些可變參數在函數調用時自動組裝爲一個tuple(元組)
  • def GetSum(*nums):
        sum=0;
        for i in nums:
            sum+=i;
        return sum;
    print(GetSum(2,3));
    print(GetSum(2,3,4,5));
    print(GetSum(2,3,4,5,6,7,8));
  • def GetSum(*nums):
        sum=0;
        for i in nums:
            sum+=i;
        return sum;
    
    s=[2,3,4,5];
    t=(2,3,4,5,6,7,8)
    print(GetSum())
    print(GetSum(*s))#「*」表明把列表或元組當中的每個值逐個賦值給函數
    print(GetSum(*t))

參數組合:定義一個函數,包含上述若干種參數:express

  • def f1(a, b, c=0, *args, **kw):
      print('a =', a, 'b =', b, 'c =', c, 'args =', args, 'kw =', kw);
    
    args = (1, 2, 3, 4);
    kw = {'d': 99, 'x': '#'};
    f1('A','B');
    f1(b='B',a='A');
    f1(b='B',a='A',c=9);
    f1(*args);
    f1('A','B',**kw);
    f1(*args,**kw);

小結數組

  • Python的函數具備很是靈活的參數形態,既能夠實現簡單的調用,又能夠傳入很是複雜的參數。
    默認參數必定要用不可變對象,若是是可變對象,程序運行時會有邏輯錯誤!
    要注意定義可變參數和 **kw 關鍵字參數的語法:
    *args是可變參數,args接收的是一個tuple;
    **kw是關鍵字參數,kw接收的是一個dict。
  • 傳參數:*args 會逐個分割args 逐個對應形參列表
    **kw 只能對應到形參列表的 **kw

函數的做用域函數

  • #全局變量與局部變量的做用域不一樣
    #生命週期不一樣
    g_a=10;#全局變量
    def changeNum():
        global a
        a=5;#局部變量
        print("函數內部:",a);
    print("調用前:",g_a);
    changeNum()
    print("調用後:",g_a);
    print("調用後:",a)
    #當全局變量和局部變量同名時,局部變量優先 -->就近一致原則

匿名函數學習

  • python 使用 lambda 來建立匿名函數
  • 語法:lambda [arg1 [,arg2,.....argn]]:expression
  • 語法:lambda [參數列表]:函數體內部代碼
  • def fun1(a,b):
        '''
        :param a:#第一個加數
        :param b:#第二個加數
        :return:#a+b的和
        '''
        return a+b;
    sum=lambda a,b:a+b;
    s=sum(2,2);
    print(s);
    sum=lambda a,b:a*b;
    s=sum(2,4);
    print(s);
  • def add(a,b,fun):
        '''
    
        :param a:
        :param b:
        :param fun: 傳遞過來的函數
        :return:
        '''
        print(fun(a,b));
    add(11,22,lambda a,b:a-b);

filter():對於序列中的元素進行篩選,最終獲取符合條件的序列spa

  • foo = [2, 18, 9, 22, 17, 24, 8, 12, 27]
    f=filter(lambda x:x%3!=0,foo);
    print(list(f))
    
    fun=lambda x: x%2!=0;
    f=filter(fun,foo);
    print(list(f));
  • 利用filter(),能夠完成不少有用的功能,例如,刪除 None 或者空字符串:
  • def is_not_empty(s):
        return  s and len(s.strip())>0;
    
    names=[    'ko',None,'','ok'];
    
    l=list(filter(lambda s:s and len(s.strip())>0,names))
    print(l);

map():將序列的每一個元素傳入函數中執行,並把結果做爲新的list返回。orm

  • foo = [2, 18, 9, 22, 17, 24, 8, 12, 27];
    print(list(map(lambda x:x%2,foo)));
相關文章
相關標籤/搜索