條件1. 接受乙個或多個函式作為引數
條件2. 輸出乙個函式
舉例:
def counter(base):def inc(step=1):
nonlocal base #修改外部變數base,賦值需要nonlocal
base += step
return base
return inc
foo = counter(5)
foo1 = counter(5)
print(foo == foo1) #false
print(id(foo),foo)
print(id(foo1),foo1)
舉例:有這樣乙個add函式
def add(x,y): #柯里化成 add(x)(y) 的格式return x + y
將此函式柯里化
def add(x):def _add(y):
return x + y
return _add
foo = add(7) #等同於 add(7)(8)
print(foo(8))
def increasing():id = 0
while true:
id += 1
yield id
user_id = increasing()
for _ in range(10):
print(next(user_id))
舉例:
def logger(fn):def _logger(*args,**kwargs):
print('before')
ret = fn(*args,**kwargs)
print('after')
return ret
return _logger
@logger # add = logger(add)
def add(x,y):
return x + y
print(add(5,600))
舉例:
import functoolsimport datetime
import time
def copy_property(src):
def _copy_property(dst):
dst.__name__ = src.__name__
dst.__doc__ = src.__doc__
#dst.__qualname__ = src.__qualname__ #限定名
return dst
return _copy_property
def timeouttip(t):
def logger(func):
#@functools.wraps(func)
@copy_property(func)
'''test2'''
# before 功能增強
start = datetime.datetime.now()
# print('call:{}() starttime:{} nowdescription:{}'.format(func.__name__,start,func.__doc__),end='\t\t')
print('call:{}()'.format(func.__name__), end='\t\t')
ret = func(*args,**kwargs)
# after 功能增強
stoptime = (datetime.datetime.now() - start).total_seconds()
if stoptime > t:
print('timeout time:{} '.format(stoptime))
return ret
return logger
@timeouttip(2) #帶參裝飾器與不帶參裝飾器的區別
def add(x,y):
'''test1'''
#time.sleep(3)
print('returnvalue = x+y')
return x+y
print(add(100,y=200))
print(add.__doc__,add.__qualname__)
python函式相關
函式的定義為 def func1 a,b,c 1,args,d kwargs pass函式定義中的引數,稱謂形參,而其中a,b稱為位置引數,c和d稱為關鍵字引數,若按順序傳參的話,c可以作位置引數來傳遞實參,而d由於位於可變引數之後,所以只能作為關鍵字引數來傳入實參,而且可變引數前的引數必須是關鍵字...
Python函式相關
對於不可變引數,函式內部操作引數不會改變實參 對於可變型別,函式內部操作會改變實參 列表,字典 全域性變數,定義時一般會在前面加 g 或 gl 列表 可以將兩個列表合併在一塊,實際就是呼叫列表的extend方法 預設引數 定義函式時,可以將某個引數定義乙個預設值,具有預設值的引數就叫預設引數 呼叫函...
Python 函式相關
這次用的是ipad pro 藍芽鍵盤 colaboatory 雲ide。不得不說谷歌還是np,免費提供雲ide,免費提供gpu訓練深度學習模型,用safari就可以寫。缺點是得全程掛vpn,而且不知道為什麼無法使用簡體中文輸入法,只好用繁體輸入法打注釋。下面是關於函式返回值的一些操作 def fun...