7. def f1(n):
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f2 = f1
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f1f2
function 的定義
8. def f1(n):
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f2 = f1
f1 # <function f1 at 0x7f807e6261e0>
f2 # <function f1 at 0x7f807e6261e0>
f2(10) # 55
print('I am f1')
sum = 0
for i in range(n+1):
sum += i
return sum
f1f2
function 的定義
20. Query with retry
def query_mysql(sql):
...
return result
for i in range(5):
try:
res = query_mysql('select *')
except:
sleep(60)
21. Download with retry
def download_s3(path):
...
return result
for i in range(5):
try:
res = download_s3('s3://a.csv')
except:
sleep(60)
22. XXXXX with retry
def find_mongo(q):
...
return result
for i in range(5):
try:
res = find_mongo('{f: 1}')
except:
sleep(60)
23. retry 吃 function (和其參數)
def retry(do_work, work_arg):
for i in range(5):
try:
return do_work(work_arg)
except:
sleep(60)
res = retry(query_mysql, 'select *')
24. retry 累贅,重點是執行 do_work(work_arg)
def retry(do_work, work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
retry(download_s3, 's3://a.csv')
retry(find_mongo, '{f: 1}')
25. 重點是執行 do_work(work_arg)
def retry(do_work, work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
真的在執行
retry_query_mysql( 'select *')
可能寫成這樣嗎?
26. def retry(do_work) work_arg:
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
retry(query_mysql, 'select *')
真的在執行
retry(query_mysql)('select *')
可能寫成這樣嗎?
錯!
27. def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql)('select *')
只是定義:
吃一個arg的函數
一個吃 function 吐 function 的 function
28. def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql) #work is not executed
res = retry(query_mysql)('select *')
52. def retry(do_work):
def wrapper(work_arg):
for i in range(5):
try:
work_res = do_work(work_arg)
return work_res
except:
sleep(60)
return wrapper
retry(query_mysql) #work is not executed
res = retry(query_mysql)('select *')