考虑以下代码:
##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()返回‘get_namespace_length’作为exepcted,但test()仍然返回8,这是'original‘的长度。如何让get_namespace_length()接受修改后的变量?
这种实现的用例是一些函数在导入的模块中使用了相同的变量,如果我可以修改/设置变量,就可以避免在每个函数中显式地调用新的变量。有人能给点建议吗?
而且,它不一定要以上面所示的方式实现,只要它能工作。(全局变量等)
发布于 2018-06-04 07:12:03
嗯..。get_namespace_length
的默认参数是database
,未在代码片段中定义,您还可以从调用testing
切换到test
(我猜这是许多拼写错误之一)。
简而言之,我认为这与字节码在python中的编译方式有关。参数是“预加载的”,因此对变量(如命名空间)的更改不会包含在get_namespace_length
的编译中。如果我没记错的话,在import
上,会编译并执行导入文件的整个代码(请尝试在testing.py的末尾添加一条print()
语句,以查看)
因此,为了获得长度为4,您真正想做的是将testing.py更改为:
namespace = "original"
def print_namespace():
print ("Namespace is", namespace)
def get_namespace_length():
_str = namespace
print(len(_str))
或者仅仅是print(len(namespace))
。希望这能有所帮助!
https://stackoverflow.com/questions/50671679
复制相似问题