У меня есть функция, которая использует глобальную переменную x
в качестве значения по умолчанию для своего аргумента. Однако в функции main()
, вызываемой в блоке if __name__ == '__main__':
, я хотел бы разрешить пользователю изменять эту переменную, чтобы изменить поведение функции. Это не похоже на работу, потому что когда я запускаю скрипт x
в функции, в этом случае уже занят 9 и не изменяется на 10, как я хотел бы.
x = 9
def function(var=x):
print(var)
def main():
global x
x = 10
function()
if __name__ == '__main__':
main()
Простой вызов function(var=x)
в main()
не будет работать в моем случае, потому что function()
на самом деле декоратор, и это скорее:
from module import decorator
x = 9
@decorator(var1=x, var2=15)
def function():
pass
def main():
global x
x = 10
function()
if __name__ == '__main__':
main()
Кроме того, декоратор импортируется из другого модуля, поэтому я думаю, что ответ, опубликованный в Определение аргумента по умолчанию в качестве глобальной переменной также может не сработать. Еще сложнее, предполагается, что декоратор принимает и другие аргументы, поэтому использование класса, предложенного kederra c ниже, также не работает. Однако, так как этот модуль сделан мной, я мог бы скопировать необходимый код в мой новый скрипт, но я хотел бы избежать этого, если это возможно.
Заранее большое спасибо за помощь!