python引數的作用和區別以及使用方法
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,map將Iterable傳入函式,並把結果顯示出來;
---延伸:Iterable迭代器:可以被netx()函式呼叫並不斷返回值的物件,可以是list、tuple、dict、字元,但不能為單個整數
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、在函式的定義中,預設引數必須指向不變物件。