2016-03-17 2 views
2

Мой код выглядит так:Python: простой способ сгладить tupple, содержащий другой tupple из функции

def f1(): 
    return 2, 3 

def f2(): 
    return 1, f1() 

я могу сделать:

a, (b, c) = f2() 

Я хочу сделать:

a, b, c = f2() 

Все решения, которые я могу найти, требуют использования множества сумасшедших скобок/скобок или создания функции идентификации для использования * oper АТОР. Я хотел бы только изменить f2().

Есть ли что-то более простое?

ответ

8

Вместо использования 1, f2(), используйте кортеж конкатенацию:

def f2(): 
    return (1,) + f1() 

Как уже говорилось в комментарии, вы также можете сделать это:

def f2(): 
    x,y = f1() 
    return 1, x, y 

Вы также можете сделать это:

def f2(): 
    return (lambda *args: args)(1, *f1()) 

Это немного длиннее, но имеет преимущество перед x,y = f1(), потому что этот способ f1() может возвращать кортеж с любым количеством элементов.

+1

В качестве альтернативы, 'x, y = f1(); return 1, x, y'. –

+0

@SvenMarnach: Очень верно. Я добавил это. – zondo

+0

Первый очень элегантный, спасибо! – calandoa