0

我只想缩小代码的行数。我有两个循环,唯一的区别是两行。是否有可能(函数或类)在每种情况下更改行?这两个循环是:

cursor = ''
while True:
    data =  API_like_query(id,cursor)
    #more code
    for i in data['data']:
        ids_likes += i['id']+' , '
    #more code

cursor = ''
while True:
    data =  API_com_query(id,cursor)
    #more code
    for i in data['data']:
        ids_likes += i['from']['id']+' , '
    #more code

更多代码是使用相同的代码块。不同之处在于函数调用(第 3 行)和第 6 行中不同的字典对象。

4

3 回答 3

3

你可以很容易地创建一个函数:

def do_stuff(api_func, get_data_func):
    cursor = ''
    while True:
        data = api_func(id, cursor)
        #more code
        for i in data['data']:
            ids_likes += get_data_func(i) + ', '
        #more code

然后可以通过以下方式重现第一个循环:

do_stuff(API_like_query, lambda i: i['id'])

第二个:

do_stuff(API_come_query, lambda i: i['from']['id'])

函数用于将代码划分为更小、更易于测试和可重用的部分,因此在这种情况下似乎很合适。

于 2013-08-07T13:59:46.613 回答
0

joinedquery=izip(API_like_query(id,cursor),API_com_query(id,cursor))如果查询长度相同。然后for i1,i2 in joinedquery:

于 2013-08-07T13:56:57.110 回答
-1

您可以将所有内容放入带有参数的函数中:

def do_something(which_query):
    cursor = ''
    while True:
        if which_query == 1:
            data =  API_like_query(id,cursor)
        elif which_query == 2:
            data =  API_com_query(id,cursor)
        #code
        for i in data['data']:
            if which_query == 1:
                ids_likes += i['id']+' , '
            elif which_query == 2:
                ids_likes += i['from']['id']+' , '
        #more code

但是额外的 if 只会使代码更短而不是更快!

于 2013-08-07T13:59:29.640 回答