Как я могу присвоить ноль отсутствующей переменной в функции - PullRequest
1 голос
/ 07 апреля 2020

Прежде всего, спасибо, что прочитали это. Я новичок в Python и каждый день узнаю что-то новое. Я написал функцию, где входными данными являются 4 переменные, а выходными являются 4 переменные. Моя проблема в том, что переменные определяются где-то еще, и это вызывает скрипт. Теперь, что если пользователь определяет только 3 переменные, в этом случае я автоматически хочу, чтобы четвертая переменная получила присвоенное нулевое значение. Я также включил другой код, который я пытаюсь использовать для той же цели.

volsum = vol1 + vol2 + vol3 + vol4

    if vol1n == missing:
       vol1n = 0
    else:
    vol1n=vol1/volsum

    if vol2n == missing:
       vol2n = 0
    else:
    vol2n=vol2/volsum

    if vol3n = missing:
       vol3n = 0
    else:
    vol3n=vol3/volsum

    if vol4n == missing:
       vol4n = 0
    else:
    vol4n=vol4/volsum       

или, возможно, используя функцию

def vol(vol1,vol2,vol3,vol4):
    volsum = vol1 + vol2
    vol1n=vol1/volsum
    vol2n=vol2/volsum
    vol3n=vol3/volsum
    vol4n=vol4/volsum
    return vol1n, vol2n,vol3n,vol4n

Ответы [ 3 ]

1 голос
/ 07 апреля 2020

Попробуйте назначить значения при определении функции:

def vol(vol1 = 0,vol2 = 0,vol3 = 0,vol4 = 0):
    volsum = vol1 + vol2
    vol1n = vol1 / volsum
    vol2n = vol2 / volsum
    vol3n = vol3 / volsum
    vol4n = vol4 / volsum
    return vol1n, vol2n,vol3n,vol4n

Теперь предположим, что вы хотите пропустить vol2:

variable_assigned = vol(vol1 = 5,vol3 = 2,vol4 = 5)

Если вам требуется одна строка (я люблю создание одного):

#defining vol()
def vol(*kwargs): return [i/sum(kwargs) for i in kwargs]
# using vol()
#example
vol (1,2,3)
#returns
[0.16666666666666666, 0.3333333333333333, 0.5]
# so to assign variables,
#if you give 3 values,
vol1n, vol2n, vol3n = vol(1,2,3)
# if 4,
vol1n, vol2n, vol3n, vol4n = vol(1,2,3,5)

Немного веселья (не рекомендуется):

  • Допустим, ваш vol1 =1, vol2 = 5 vol3 = 3 ...voln = 10
  • Итак, давайте:
vol = [ 1, 5, 3, ... n values, 10]
  • Теперь, если вы запустите следующий код:
for j in range(len(vol)): exec(f'vol{j+1}n = [i/sum(vol) for i in vol][j]')
  • Этот код автоматически создаст ваши vol1n, vol2n, ... volnn переменные автоматически.
0 голосов
/ 07 апреля 2020

Вы можете проверить, определена ли переменная или нет, используя функцию 'locals'. В качестве альтернативы, если переменные определены глобально, вам следует использовать функцию «глобальные переменные».

if 'vol1n' not in locals():
    vol1n = 0
else:
    vol1n=vol1/volsum

if 'vol2n' not in locals():
    vol2n = 0
else:
    vol2n=vol2/volsum

if 'vol3n' not in locals():
    vol3n = 0
else:
    vol3n=vol3/volsum

if 'vol4n'  not in locals():
    vol4n = 0
else:
    vol4n=vol4/volsum
0 голосов
/ 07 апреля 2020

Вместо 0, это может быть забыто? Лично я не люблю печатать вещи, когда они не нужны. Попробуйте функцию *args.

def vol_func(*args):
    volumesum = sum(args)
    vals = []
    for i in range(len(args)):
        vals.append(args[i] / volumesum)
    return vals  

volsumlst = vol_func(2.3, 4)

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...