Как в функцию передать буквально пустоту что бы сработало значение по умолчанию?
Могу ли я в python через переменную передать значение пустоты так что бы функция распознала это как не существующую переменную.
def fun(num=99):
print(num)
fun() # -> все работает
val=None
del val
val=""
val=False
fun(val) # должен работать как fun()
Что бы я не пробовал функция все равно заменяет финальное значение.
Я хочу передать пустату что бы сделать значения по умолчанию между двумя функциями одинаковой без надобности копировать их из одной функций в другую
Простой пример
def test_1(val_1=5):
print(val_1)
def test_2(val_2=???,val_3=9):
test_1(val_2)
print(val_2+val_3)
test_2() # Выведет 5 и 14
test_2(3) # Выведет 3 и 12
test_2(1,5) # Выведет 1 и 6
val_1 == val_2
Просто скопировать из функций test_1(val_1=5): в test_2(val_2=5,val_3=9):
нельзя
Я не могу менять код в функций test_1 так как она загружается из модуля к которому у меня нет доступа редактирования.
Ответы (4 шт):
Можно просто использовать
def fun(some=None,num=99):
print(num)
fun()
val=None
fun(val)
Только зачем?
def fun(num=None):
if not num:
num = 99
print(num)
Или можно сделать условие
if num == None:
чтобы, например, 0 не попадал под него.
Единственое что я нашел
def test_1(val_1=1, val_2=2, val_3=3, val_4=4, val_5=5):
print("{}-{}-{}-{}-{}".format(val_1, val_2,val_3, val_4,val_5))
def test_2(rer="nj",*args, **kwargs):
test_1(*args, **kwargs)
print(rer)
test_2()
test_2('f','r','gt','g','h')
test_2('f', 'D')
test_2(val_2='D')
Где через **kwargs можно напрямую передавать аргументы в test_1
def fix(func):
def inner(arg):
if arg is None:
return func()
else:
return func(arg)
return inner
@fix
def fun(num=99):
print(num)
Через декоратор можно задать как угодно
fun(None) # будет работать как fun()