python中引數的型別有位置引數、預設引數、可變引數、關鍵字引數、命名關鍵字引數和一些引數的組合.
位置引數:
def power(x):
    return x*x
其中x就是位置引數。


預設引數:能簡化函式的呼叫,但需要注意幾點:
1、必選引數在前,預設引數在後,否則python引數會報錯
2、當函式有多個引數的時候,把變化大的引數放在前面,變化小的引數可做為預設引數
3、預設引數必須指向不變物件
比如:l=[],時候特別注意,引數雖然定義為空的list,但l的值指向上一次l的值。

def add_column(l=[]):

    l.append("end")
    return l

原因分析:python函式在定義的時候l已經計算出來了,即[],因為預設引數l也是個變數,指向變數[],每次呼叫該函式的時候,如果呼叫的時候改變了l的內容,下次呼叫的時候,預設引數l就改變了

------------------------------------------------------------------------------------------------------------------------
避免預設引數的改變,可做如下修改:

def add_column(l=None):
    if l is None:

        l=[]

        l.append("END")

        return l

-------------------------------------------------------------------------------------------------------------------------

可變引數:就是傳入的引數不確定,可能是一個或者多個,,引數的傳遞可傳入一個list或者dict,簡化的話引數前面使用*
關鍵字引數允許傳入0個或任意個含引數名的引數,這些引數自動組裝為一個list.

def calc(*number):

    sum=0

    for n in number:
        sum=sum+n
    return sum

---------------------------------------------------------------------------------------------------------------------------

關鍵字引數:關鍵字引數允許傳入0個或任意個含引數名的引數,這些引數自動組裝為一個dict.
def person(name,age,**kw):
    print("name:",name,"age:",age,"others:",kw)

引數的傳遞過程中,如果只傳遞必選引數,關鍵字引數預設為{}

person("MAKE",23,city="beijing")

命名關鍵字引數:
引數的組合:引數定義的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數。

1、map()reduce()函式

map():接受兩個引數,一個是函式,一個是Iterable,mapIterable傳入函式,並把結果顯示出來;

---延伸:Iterable迭代器:可以被netx()函式呼叫並不斷返回值的物件,可以是listtupledict、字元,但不能為單個整數

def fn(x):
    return x*x
list(map(fn,[1,2,3,4,5]))

###[1,4,9,16,25]
 

reduce():一個函式作用在一個序列上,必須同時接受兩個引數,並把結果與下一個引數重複作用,最後把結果顯示出來,from functools import reduce,必須首先匯入。注意,字元也算序列,可把字元轉換為int


from functools import reduce
dicts1={'1':1,'2':2,'3':3,'4':4,'5':5} 

def fn(x):
    return(dicts1[x])

def list1(x):

    return reduce(lambda x,y:x*10+y,map(fn,x))

###12345

2、filter()函式:用於過濾序列,接受一個函式和一個序列,與map()不同的是把傳入的函式依次作用於每個元素,然後根據返回值是True還是False決定,能起到篩選作用。


3、在函式的定義中,預設引數必須指向不變物件。