首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >bpython -i和命名空间

bpython -i和命名空间
EN

Stack Overflow用户
提问于 2011-08-29 04:46:10
回答 3查看 93关注 0票数 0

我似乎到处都找不到这个答案。

给出这个简单的例子:

代码语言:javascript
复制
# myclass.py
class MyClass:
    def __init__(self):
        print 'test'

def main():
    my_class_instance = MyClass()

if __name__ == '__main__':
    main()

some_var = 'i exist!  ... but I think I'm in global namespace?'

如果我运行bpython -i myclass.py,我会执行程序并进入bpython环境。无论我所在的名称空间是什么- my_class_instance都不存在。但是,some_var确实存在--而且main函数本身也存在。

当我进入交互式提示符时,是否可以将main函数中存在的任何对象拉到我所在的名称空间中?或者还有什么我应该做的吗?

EN

回答 3

Stack Overflow用户

发布于 2011-08-29 04:49:17

my_class_instance位于main的名称空间中,因此您无法在main之外看到它。请改用全局变量:

代码语言:javascript
复制
my_class_instance = None

def main():
    global my_class_instance

    my_class_instance = MyClass()
票数 1
EN

Stack Overflow用户

发布于 2012-03-14 21:05:54

我有时使用的另一个技巧是在main函数的末尾返回我需要的东西。

例如,如果我需要一个实例和来自顶层main函数的一些其他变量,可以这样做:

代码语言:javascript
复制
def main():
    myclass = MyClass()
    a = 4
    return (my class, a)

if __name__ == '__main__':
    ret = main()

如果你现在用bpython -i脚本名调用你的脚本,你会在全局命名空间中有变量' ret‘,ret有你的类实例,ret1的数字是4。

票数 0
EN

Stack Overflow用户

发布于 2018-05-24 22:49:27

在Python2.7上使用交互式bpython,__name__等同于__console__。因此,您的函数main()可能永远不会被调用。一个hack是这样写的:

代码语言:javascript
复制
# myclass.py
class MyClass:
    def __init__(self):
        print 'test'

def main():
    global my_class_instance
    my_class_instance = MyClass()

if __name__ in ('__main__', '__console__'):
    main()
票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7223829

复制
相关文章

相似问题

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