2015-06-24 4 views
0

У меня есть функция, где мне нужно вернуть 2 списка, которые создаются внутри функции в python 3.x. Вместо того, чтобы возвращать списки, я могу скорее взять 2 списка в качестве аргументов и добавить любую информацию, которая мне нужна в этих списках. Мой другой подход состоял в том, чтобы вернуть словарь с двумя списками, а затем получить списки, используя ключ после возвращения функции. Оба эти метода требуют подготовки до/после вызова функции, поэтому мне просто интересно, есть ли лучший способ вернуть списки, и если не какой из этих двух подходов лучше.Принимая несколько списков в качестве аргументов, а не возвращая их в dict, есть ли лучший способ (python3)?

Пример кода:

def method1(list1, list2): 
    *do something to lists* 

def method2(): 
    *do something to lists* 
    return({'list1': list1, 'list2': list2}) 

get_lists_method1(): 
    list1 = [] 
    list2 = [] 
    method1() 

get_lists_method2(): 
    list_dict = method1() 
    list1 = list_dict['list1'] 
    list2 = list_dict['list2'] 

Редактировать, используя метод кортежи:

def method3(): 
    *create and do something with lists* 
    return (list1, list2) 

get_lists_method3(): 
    list1, list2 = method3() 

ответ

0

Я хотел бы использовать назначение кортежа. Так как эти два возвращаемые значения идут вместе, просто вернуться (песни1, List2)

# returns a tuple of two lists 
def method1(list1, list2): 
    list1.append(4) 
    list2.append(8) 
    return (list1, list2) 

# the lists are result[0] and result[1] 
result = method1([1, 2, 3], [2, 4, 6]) 
for l in result: 
    print l 

# more useful: tuple assignment 
(list1, list2) = method1([1, 2, 3], [2, 4, 6]) 
print list1 
print list2 
+0

Не знаю, почему я не рассматривал кортежи, используя распаковку. из моего примера это будет 'list1, list2 = method2()', если он вернул кортеж вместо dict. Кроме того, если вы вносите изменения в список, прошедший в качестве аргумента, разве это не избыточно, чтобы вернуть его? – Zelnoth

0

Вы хотите использовать tuple:

def method1(lst1=[], lst2=[]): 
    # do stuff to lst1 and lst2 
    lst1.append("Hello, ") 
    lst2.append("world!") 
    return (lst1, lst2) 

def method2(lst1=[], lst2=[]): 
    # do stuff to lst1 and lst2 
    lst1.append("lst1") 
    lst2.append("lst2") 
    return (lst1, lst2) 

def main(): 
    m1_result = method1() # no arguments provided, so defaults are used 
    m2_result = method2(["List 1"], ["List 2"]) 

    print(m1_result) 
    print(m2_result) 

    print(m1_result[0]) 
    print(m1_result[1]) 
    print(m2_result[0]) 
    print(m2_result[1]) 

main() 

Кроме того, предполагается, что вы методы один пишущие 1 и 2 , вы можете указать значение по умолчанию для своих параметров, если они не предусмотрены при вызове функции.