簡體   English   中英

如何優化這些python函數?

[英]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_blahy_blahz_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM