高階函式
裝飾器decorator
偏函式python函式定義
函式:是一種最基本的**抽象的方式,把乙個可以重複執行的功能封裝起來。
定義函式:要用def語句,寫出函式名、引數、冒號,return注:若有多個返回值,返回的是tuple
#實現a+b
def add( a,b):
return a+b
呼叫函式:要指定好引數,確定好返回型別
空函式:用pass語句
注:因為python定義函式時,引數沒有型別,因此可以用isinstance()函式判斷型別是否正確
,isinstance()的功能類似type(),不過type() 不會認為子類是一種父類型別,不考慮繼承關係,isinstance() 會認為子類是一種父類型別,考慮繼承關係。判斷兩個型別時常用isinstance()
語法:isinstance(object, classinfo)
def add( a,b):
if not isinstance(a,int):
raise typeerror("bad type")
return a+b
python函式引數
python函式引數有很多種
位置引數(必選引數)
就是正常的函式形參,若是要呼叫函式,就必須要按照指定順序傳入的引數
預設引數
就是個引數設定乙個預設值,使該引數可以不填;
注:必選引數在前,預設引數在後,否則可能有歧義。
def add( a=5,b=6):
if not isinstance(a,int):
raise typeerror("bad type")
return a+b
可變引數
可變引數就是傳入引數個數是可變的;可變引數傳入的是tuple型別
#計算1到100的和,使用可變引數定義函式
#list或者tuple要作為可變引數傳入函式時,前加*即可
sum = list(range(1,101))
def add_sum(*nums):
sum=0
for i in nums:
sum+=i;
return sum
add_sum(*sum)
關鍵字引數
關鍵字引數允許傳入任意個含引數名的引數,關鍵字引數在函式內組裝成dict,
注:1.dict若想作為關鍵字引數,前加 ** 即可,不過傳入到函式內部的只是dict的複製品,因此函式內部對複製品的修改不會應該dict本身
2.有位置引數時,位置引數必須在關鍵字引數的前面,但關鍵字引數之間不存在先後順序的
命名關鍵字引數
命名關鍵字引數可以用來限制關鍵字引數的名字,命名關鍵字引數需要乙個特殊的分隔符 * ,後的引數視為命名關鍵字引數,命名關鍵字引數必須傳入引數名,並且必須傳入
注:函式定義中已經有了乙個可變引數,後面跟著的命名關鍵字引數就不再需要乙個特殊分隔符了
def add(a,b , * ,c,d):
def add(a,b , *aaa ,c,d):
引數組合
引數組合的順序必須是:必選引數、預設引數、可變引數、命名關鍵字引數和關鍵字引數
注:因為函式的形參沒有具體的型別,因此若是直接傳入list\tuple\dict,容易被編譯器誤以為是乙個資料型別,因此傳入list等資料型別時最好先轉化為可變引數或者是關鍵字引數防止產生歧義
高階函式
即乙個函式可以接受另乙個函式作為引數;
lambda函式
lambda函式建立匿名函式,函式沒有函式名。
語法 :lambda argument_list: expression
l = list(filter(lambda x:x%2==1, range(1, 20)))
l#輸出:[1, 3, 5, 7, 9, 11, 13, 15, 17, 19]
map函式
語法:map(func, seq)
第乙個引數func是乙個函式名,第二個seq是乙個序列(如:list)。map()將會這個函式應用在序列seq的每乙個元素上,然後返回乙個被這個函式func改變後的元素的列表
filter函式
語法:filter(func, seq)
第乙個引數func是乙個函式名,第二個seq是乙個序列(如:list)。func返回true or false ,filter把符合func的元素加入到結果列表中
reduce函式
語法:reduce(func, seq)
持續的應用函式func在序列上。它將會返回乙個值。
sorted()函式
語法:sorted(iterable, cmp=none, key=none, reverse=false)
cmp – 比較的函式,這個具有兩個引數,key – 主要是用來進行比較的元素,只有乙個引數
注:1.sort 是應用在 list 上的方法,sorted 可以對所有可迭代的物件進行排序操作。
2.list 的 sort 方法返回的是對已經存在的列表進行操作,無返回值,而內建函式 sorted 方法返回的是乙個新的 list,而不是在原來的基礎上進行的操作。
l=[('b',2),('a',1),('c',3),('d',4)]
sorted(l, cmp=lambda x,y:cmp(x[1],y[1])) # 利用cmp函式
輸出:[('a', 1), ('b', 2), ('c', 3), ('d', 4)]
裝飾器decorator
由於函式也是乙個物件,而且函式物件可以被賦值給變數,所以,通過變數也能呼叫該函式。函式物件又乙個__name__ 屬性,可以用於獲得函式名。
def add( a,b):
return a+b
a = add
a(4,5)
#輸出:9
這種在**執行期間動態增加功能的方式,稱之為「裝飾器」(decorator)
裝飾器實際上就是乙個高階函式,用@在函式定義處修飾,
def log(text):
def decorator(func):
print('%s %s():' % (text, func.__name__))
return func(*args, **kw)
return decorator
@log('execute')
def now():
print('2015-3-25')
#相當於乙個三層巢狀的decorator
偏函式
把乙個函式的某些引數給固定住(也就是設定預設值),返回乙個新的函式,呼叫這個新函式會更簡單。
#生成乙個把字串按二進位制轉化的函式
import functools
int2 = functools.partial(int, base=2)
Python學習筆記 函式
1.基本呼叫 python 中的函式使用關鍵字 def 來建立乙個函式,正如其他語言中的函式一樣,有函式名,引數,以及返回值。函式的引數不用指定型別,return 可以在任何地方出現,表示函式結束,如果沒有返回內容則預設返回值為none。乙個簡單的無引數,無返回值的hello world def h...
python學習筆記 函式
def fun object,param1,param2 none print type object tuple,呼叫時預設的所有實參全部轉化為tuple傳遞給object fun 1,2,3,4,5,6,7,param1 8 指定param1的呼叫實參,param2引數呼叫預設值函式內可訪問全域...
python學習筆記 函式
建立函式 def myfirstfuntion 函式具體內容 呼叫函式 直接輸入函式面名及引數。def myfirstfnuncyion syntaxerror invalid syntax def myfirstfunction print 我愛你,qt syntaxerror eol while...