Задержка считывания аргументов по умолчанию до вызова функции - PullRequest
1 голос
/ 10 мая 2019

У меня есть функции и переменные, распределенные по нескольким файлам, и я пытаюсь не создавать сеть импорта.

В одном файле содержится функция.В других переменных, а также в применении этих функций (итого 2 файла).

Для применения функций требуются функции (очевидно), но функция требует переменных.

Iхочу иметь возможность сделать что-то вроде следующего.

[РЕДАКТИРОВАТЬ: я хочу определить переменную после определения функции]

def function(arg1, arg2 = a):
    return arg1 + arg2

a = 5

function(4)

То, что я хотел бы вывести это 9Однако вместо этого он выдает ошибку с жалобой на то, что a не определен (он не идет дальше функции, поэтому не может прочитать переменную).

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

Если я сделаю что-то вроде

def function_1(a):
    def function_2(arg1, arg2 = a):
        return arg1 + arg2

a = 5

Тогда он не будет жаловаться, однако мне теперь нужно вызвать function_1, чтобы запустить function_2.

Если кто-томог бы либо указать мне верное направление, либо сказать, что то, что я делаю, не представляется возможным, и это было бы очень признательно.

1 Ответ

2 голосов
/ 10 мая 2019

Использование None:

def function(arg1, arg2=None):
    if arg2 is None:
        arg2 = a
    return arg1 + arg2

a = 5

function(4)

Тем не менее использование глобального типа a для воздействия на результат функции может быть не лучшим подходом.Глобальные переменные делают код трудным для рассуждения и трудным для тестирования.

...