Установить / изменить переменную, используемую в функции из импортированного модуля - PullRequest
0 голосов
/ 04 июня 2018

Рассмотрим следующий код:

##testing.py   
namespace = "original"
    def print_namespace():
       print ("Namespace is", namespace)

    def get_namespace_length(_str = namespace):
        print(len(_str))

##Main
import testing 
testing.namespace = "test"
testing.printnamespace()
testing.get_namespace_length()

print_namespace () возвращает 'test' как ожидаемый, но get_namespace_length () по-прежнему возвращает 8, что является длиной 'original'.Как я могу заставить get_namespace_length () принимать измененную переменную?

Вариант использования такой реализации: некоторые функции используют одну и ту же переменную в импортированном модуле. Если я могу изменить / установить переменную, я могу избежать явного вызова новой переменной в каждой функции.Может кто-нибудь посоветовать?

Кроме того, он не должен быть реализован так, как показано выше, если он работает.(глобальная переменная и т. д.)

1 Ответ

0 голосов
/ 04 июня 2018

Гм ... ваш аргумент по умолчанию для get_namespace_length равен database, не определен в вашем фрагменте кода, также вы переключаетесь с вызова testing на test (я предполагаю, что это была одна из многих опечаток).

Короче говоря, я считаю, что это связано с тем, как байт-код компилируется в python.Аргументы «предварительно загружены», и поэтому изменение переменной (например, пространства имен) не включается в компиляцию get_namespace_length.Если я правильно помню, после import весь код импортируемого файла компилируется и выполняется (попробуйте добавить оператор print() в конце test.py, чтобы увидеть)

Так что вы действительно хотитедля получения длины 4 измените testing.py на:

namespace = "original"
def print_namespace():
    print ("Namespace is", namespace)

def get_namespace_length():
    _str = namespace
    print(len(_str))

или просто print(len(namespace)).Надеюсь, это поможет!

...