Как установить значение по умолчанию из соседнего значения?
Я хочу создать функцию в которой
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
Если я правильно понял, то может так:
def func(*args):
default = [color1,..., colorN)
for i,n in enumerate(args):
if n == None:
n = default[i]