Как установить значение по умолчанию из соседнего значения?

Я хочу создать функцию в которой

def fun(text_1=1, text_2=text_1) :
    print(text_1 + text_2)
fun()     # получится 1+1=2
fun(6)    # получится 6+6=12
fun(9, 8) # получится 9+8=17

Если text_2=None то text_2 == text_1 Можно ли в python такое реализовать без написания кучи if:else:

def fun(color, color_hover, back, back_hover, border, border_hover):
    if color == None:
        color="#000"
    if color_hover == None:
        color_hover=color
    if back == None:
        back="#fff"
    if back_hover == None:
        back_hover=back
    if border == None:
        border=back
    if border_hover == None:
        border_hover=border

Могу ли я как нибудь оптимизировать этот код?


Ответы (2 шт):

Автор решения: Александр

В python в аргументе нельзя указать динамическое значение, зависящее от других аргументов, поскольку на этапе объявления их ещё не существует. И при попытке подобного объявления:

def fun(text_1=1, text_2=text_1) :
    pass

Вы получите ошибку о том, что name 'text_1' is not defined.

Но ничего не мешает эту зависимость прописать в теле самого метода:

def fun(text_1=1, text_2=None) :   
    text_2 = text_2 or text_1
    print(text_1 + text_2) 
fun() # получится 1+1=2 
fun(6) # получится 6+6=12 
fun(9, 8) # получится 9+8=17

Update:

Либо еще лучше так:

def fun(text_1=1, text_2=None) :   
    text_2 = text_1 if text_2 is None else text_2
    print(text_1 + text_2) 
fun(1) # получится 1+1=2 
fun(6) # получится 6+6=12 
fun(9, 8) # получится 9+8=17

Ибо, как ниже подметил Qwertiy, для text_2=text_2 or text_1 не предусмотрен случай, когда вторым аргументом будет передан 0

→ Ссылка
Автор решения: Zmiter

Если я правильно понял, то может так:

def func(*args):
   default = [color1,..., colorN)
   for i,n in enumerate(args):
      if n == None:
         n = default[i]
→ Ссылка