从导入的模块设置/修改函数中使用的变量

时间:2018-06-03 22:50:20

标签: python-3.x module global-variables

请考虑以下代码:

##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'作为exepcted,但是get_namespace_length()仍然返回8,这是'original'的长度。如何使get_namespace_length()获取修改后的变量?

这种实现的用例是某些函数在导入的模块中使用相同的变量,如果我可以修改/设置变量,我可以避免在每个函数中显式调出新变量。有人可以提供建议吗?

此外,只要它有效,它就不必以上面显示的方式实现。 (全局变量等)

1 个答案:

答案 0 :(得分:1)

嗯...... <a-assets> <img id="my-image" src="qq.jpg"> </a-assets> <a-plane position="0 0 -10" width="20" height="10" color="#7BC8A4"> <a-text position="0 3 1" value="Title" color="black" width="30"></a-text> <a-text position="-1.5 -1 1" value="In the field ocolor="black" width="15"></a-text> <a-image position="-5 1.5 1" width="7" height="5" src="#my-image"> </a-image> </a-plane> 的默认参数是get_namespace_length,在您的代码段中未定义,您也可以从调用database切换到testing(我猜是这是很多错别字之一。)

简而言之,我相信它与如何在python中编译字节码有关。参数是“预加载的”,因此对变量(例如命名空间)的更改不会包含在test的编译中。如果我没记错的话,在get_namespace_length上编译并执行导入文件的整个代码(尝试在tests.py末尾添加import语句来查看)

所以你真正想要获得4的长度是将testing.py改为:

print()

或只是namespace = "original" def print_namespace(): print ("Namespace is", namespace) def get_namespace_length(): _str = namespace print(len(_str)) 。 希望有所帮助!