bpython -i &;命名空间

发布于 2024-12-01 23:32:12 字数 492 浏览 1 评论 0原文

我似乎无法在任何地方找到这个答案。

举个简单的例子:

# 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 函数本身也存在。

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

I can't seem to find this answer anywhere.

Given the trivial example:

# 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?'

If I run bpython -i myclass.py, I execute the program & drop into the bpython environment. Whatever namespace I'm in - my_class_instance does not exist. However, some_var does exist - and so does the main function itself.

Is there anyway that I can pull any objects that exist in that main function into the namespace I'm in when I drop into that interactive prompt? Or is there something else I should do?

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(3

街角卖回忆 2024-12-08 23:32:12

my_class_instance 位于 main 的命名空间中,因此您在 main 之外看不到它。使用全局代替:

my_class_instance = None

def main():
    global my_class_instance

    my_class_instance = MyClass()

my_class_instance is in main's namespace, so you can't see it outside of main. Use a global instead:

my_class_instance = None

def main():
    global my_class_instance

    my_class_instance = MyClass()
随风而去 2024-12-08 23:32:12

当我想从运行 main 函数中返回一些东西时,我有时会使用的另一个技巧是在 main 末尾返回我需要的东西。

因此,例如,如果我需要顶层主函数中的一个实例和一些其他变量,则可以这样做:

def main():
    myclass = MyClass()
    a = 4
    return (my class, a)

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

如果您现在使用 bpython -i scriptname 调用脚本,您将在全局命名空间中拥有变量“ret”和 ret [0] 包含您的类实例,ret[1] 包含数字 4。

Another trick I sometimes use when I want something back from running a main function is to return what I need at the end of main.

So, for example if I need an instance and some other variable from the main function in the top level one could do:

def main():
    myclass = MyClass()
    a = 4
    return (my class, a)

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

If you now call your script with bpython -i scriptname you will have the variable 'ret' in the global namespace and ret[0] has your class instance, ret[1] has the number 4.

笨死的猪 2024-12-08 23:32:12

在 python 2.7 上使用交互式 bpython,__name__ 等于 __console__。所以你的函数 main() 可能永远不会被调用。一个 hack 是这样写:

# 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()

Using interactive bpython over python 2.7, __name__ is equal to __console__. So your function main() may be never called. A hack would be to write:

# 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()
~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文