Python, вызывающий функцию со значением по умолчанию для аргументов - PullRequest
0 голосов
/ 21 февраля 2019

В Python, как я могу вызвать функцию, используя значение аргумента по умолчанию?Я знаю, что это можно сделать, просто не передавая параметр при вызове функции, но я бы предпочел передать переменную через функцию.Имея эти две функции:

def A(argA1=defValA1, argA2=defValA2, argA3=defValA3):    
    argB1val=K*argA1
    argB2val=K*argA2
    argB3val=K*argA3
    B(argB1=argB1val, argB2=argB2val,argB3=argB3val)

def B(argB1=defValB1, argB2=defValB2, argB3=defValB3):
    print("First argument: "+argB1)
    print("Second argument: "+argB2)
    print("Third argument: "+argB3)

Если я вызову A () со всеми аргументами, проблем не будет:

Main:

A(argA1val, argA2val, argA3val)   

Но что если явызвать A () с некоторыми отсутствующими аргументами ?:

Main:

A(argA1val) 

В этом случае внутри A () будет вызываться функция

B ()значения по умолчанию для последних двух:

B(argB1= K*argA1, argB2= K* defValA2, argB3= K* defValA3)

Однако я хотел бы вызвать B (), используя значения по умолчанию для последних двух аргументов, например:

B(argB1= K*argA1, argB2=defValB2, argB3=defValB3)

Итак, я хотел бы, чтобы A () было что-то вроде:

def A (argA1 = defValA1, argA2 = defValA2, argA3 = defValA3):

if (argA1==defValA1):
    argB1val=B.getDefaultValue("argB1")
else:
    argB1val=K*argA1

if (argA2==defValA2):
    argB2val=B.getDefaultValue("argB2")
else:
    argB2val=K*argA2

if (argA3==defValA3):
    argB3val=B.getDefaultValue("argB3")
else:
    argB3val=K*argA3

B(argB1=argB1val,argB2=argB2val,argB3=argB3val)

В противном случае мне потребуетсясделать что-то вроде:

def A (argA1 = defValA1, argA2 = defValA2, argA3 = defValA3):

if (argA1==defValA1 && argA2!=defValA2 && argA3!=defValA3):

    argB2val=K*argA2
    argB3val=K*argA3
    B(argB1= defValB1, argB2=argB2val,argB3=argB3val)

if (argA1!=defValA1 && argA2==defValA2 && argA3!=defValA3):

    argB1val=K*argA1
    argB3val=K*argA3
    B(argB1=argB1val, argB2= defValB2,argB3=argB3val)

if (argA1!=defValA1 && argA2!=defValA2 && argA3==defValA3):

    argB1val=K*argA1
    argB2val=K*argA2
    B(argB1= argB1val, argB2=argB2val,argB3= defValB1)

if (argA1==defValA1 && argA2==defValA2 && argA3!=defValA3):

    argB3val=K*argA3
    B(argB1= defValA1, argB2= defValA2,argB3=argB3val)

    ….
    ….
    ….

    Etc… 

Имея еще больше комбинаций, если у нас есть больше параметров.

Кто-нибудь знает, есть ли способ получить значение по умолчанию для параметра, передаваемого в функцию?

Спасибо!

1 Ответ

0 голосов
/ 21 февраля 2019

Просто позвольте им быть None и установите их во время выполнения.

def A(argA1=None, argA2=None, argA3=None):    
    argB1val= (K * argA1) if argA1 is not None else defValA1
    argB2val= (K * argA2) if argA2 is not None else defValA2
    argB3val= (K * argA3) if argA3 is not None else defValA3
    B(argB1=argB1val, argB2=argB2val, argB3=argB3val)

def B(argB1=defValB1, argB2=defValB2, argB3=defValB3):
    print("First argument: " + argB1)
    print("Second argument: " + argB2)
    print("Third argument: " + argB3)
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...