首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >从导入的模块设置/修改函数中使用的变量

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

Stack Overflow用户
提问于 2018-06-04 06:50:20
回答 1查看 50关注 0票数 1

考虑以下代码:

代码语言:javascript
复制
##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()接受修改后的变量?

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

而且,它不一定要以上面所示的方式实现,只要它能工作。(全局变量等)

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2018-06-04 07:12:03

嗯..。get_namespace_length的默认参数是database,未在代码片段中定义,您还可以从调用testing切换到test (我猜这是许多拼写错误之一)。

简而言之,我认为这与字节码在python中的编译方式有关。参数是“预加载的”,因此对变量(如命名空间)的更改不会包含在get_namespace_length的编译中。如果我没记错的话,在import上,会编译并执行导入文件的整个代码(请尝试在testing.py的末尾添加一条print()语句,以查看)

因此,为了获得长度为4,您真正想做的是将testing.py更改为:

代码语言:javascript
复制
namespace = "original"
def print_namespace():
    print ("Namespace is", namespace)

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

或者仅仅是print(len(namespace))。希望这能有所帮助!

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/50671679

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档