删除b/\uu init\uuuuuuuy.py并用不同的代码创建b.py之后,输出没有改变吗?

2024-04-25 04:38:58 发布

您现在位置:Python中文网/ 问答频道 /正文

我创建a.pyb/__init__.py

    $ ls
    $ cat > a.py
    import b
    print "a"
    $ mkdir b
    $ cat > b/__init__.py
    print "b"

它工作正常:

    $ python a.py 
    b
    a

我删除b/__init__.py并在顶部文件夹中创建b.py

    $ rm b/__init__.py
    $ cat > b.py
    print "new b"
    $ python a.py 
    b
    a

它不打印“new b”,而是打印“b”。为什么?你知道吗


Tags: rmpyimport文件夹newinitlscat
1条回答
网友
1楼 · 发布于 2024-04-25 04:38:58

你刚刚删除了b/__init__.py,但是确实有一个b/__init__.pyc,在你的a.py中你仍然导入了b(import b)。这可能会导致解释器假设已经是字节编译的,因为它看到了b/__init__.pyc,并接受这个命令,这使得它以相同的顺序打印。你知道吗

注意,这个命令rm b/__init__.py只是删除了文件,而不是文件夹或.pyc。这也许就是原因。你知道吗

试试rm -r b,你的代码应该能正常工作。你知道吗

这确实是python解释器的预期行为。如果您不希望解释器对文件进行字节编译,您可以call it with the -B parameter但这不建议用于性能问题,因为byte-compiled code makes the program runs much faster。你知道吗

你可以阅读更多关于modules and byte-compiled files and search paths in the docs。你知道吗

希望这有帮助!你知道吗

相关问题 更多 >