[英]how to optimize these python functions?
“”“我有三個python函數:a(),b(),c(),它們的處理流程幾乎相同。不同之處只是'x','y','z',這三個只是函數名稱或變量名稱的一部分。如何優雅地編寫這些函數?
def a():
do_x()
some = var1['x_id']
var2['x_result'] = x_process()
...
def b():
do_y()
some = var1['y_id']
var2['y_result'] = y_process()
...
def c():
do_z()
some = var1['z_id']
var2['z_result'] = z_process()
...
這三個函數基本上是相同的,除了它們調用哪個函數以及使用哪個映射索引。 因此,您只需傳遞調用的函數並將索引作為參數映射到統一函數即可:
def do_something(do_fun, id1, id2, process_fun):
do_fun()
some = var1[id1]
var2[id2] = process_fun()
do_something(do_x, 'x_id', 'x_result', x_process)
最好的方法不僅是重寫這些函數,還在於重組它們使用的各種項,方法是將它們從名稱中帶有x,y或z的變量更改為存儲在映射字符串“ x”的結構中的項。 ,“ y”和“ z”添加到適當的內容。 像這樣:
do_funcs = {'x': do_x, 'y': do_y, 'z': do_z}
# make ids whatever is in var1
# but with the keys as "x", "y", "z" instead of "x_id", "y_id", "z_id"
ids = {}
# make resu;ts whatever is in var2
# but with the keys as "x", "y", "z" instead of "x_result", "y_result", "z_result"
results = {}
processes = {'x': x_process, 'y': y_process, 'z': z_process}
然后,您可以編寫一個函數:
def do_stuff(which):
do_funcs[which]()
some = ids[which]
results[which] = processes[which]()
然后調用do_stuff('x')
, do_stuff('y')
或do_stuff('z')
。
那只是一個草圖,因為准確地做到最好取決於其他地方的定義和使用方式。 但是,基本思想是不要將變量名的一部分用作參數。 如果您發現一堆名為x_blah
, y_blah
和z_blah
的東西,甚至是dict鍵(如"x_id"
和"y_id"
,則應嘗試重組它們,以便它們是直接由單個值參數化的數據結構(例如,字符串"x"
, "y"
或"z"
)。
您可以使用lambda函數:
def a():
print 'a'
def b():
print 'b'
def c():
print 'c'
def a_process():
print 'a'
def b_process():
print 'b'
def c_process():
print 'c'
def func(x):
do = {'a':lambda: a(), 'b':lambda: b(), 'c':lambda:c()}
do[x]()
some = var1['{}_id'.format(x)]
process = {'a':lambda: a_process(), 'b':lambda: b_process(), 'c':lambda:c_process()}
var2['{}_result'.format(x)] = process[x]()
func('c')
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.