gpt4 book ai didi

python - 如果 X 中有多个 Y,Python 究竟如何解析 "from X import Y"?

转载 作者:太空宇宙 更新时间:2023-11-03 14:10:32 24 4
gpt4 key购买 nike

我有一个包 X,其中包含两个名为 Y 的不同东西

一个是模块:

# X/Y.py
print 'hello'

另一个是变量:

# X/__init__.py
Y = 'world'

如果我执行 from X import Y 我会得到哪个 Y,为什么?什么决定了导入语句的顺序和隐藏规则?

最后,有什么我可能不小心做的会改变答案的事情吗?

基本上我得到了一个错误报告,指出在用户的机器上这段代码导致与我在我的机器上得到的相反的 Y 导入。我无权访问用户的机器,所以我想弄清楚发生了什么。

我想知道上一个问题是否有线索: python: from x import y changes previous import result

最佳答案

包中的模块一旦被导入,也被设置为父模块对象的属性。但是,from module import name 语法将首先查看导入模块对象的属性(X 的全局变量)以解析 名称

所以,答案是视情况而定。如果您还没有导入 X.Y 模块,那么您最终将 Y 绑定(bind)到 'world'。如果您导入了 X.Y(使用 import X.Yfrom X.Y import some_name),则 Y 绑定(bind)到X.Y 子模块。后者是 X 中的 Y 被设置为全局的副作用。

演示:

$ mkdir foo
$ cat << EOF > foo/__init__.py
> bar = 'from the foo package'
> EOF
$ cat << EOF > foo/bar.py
> baz = 'from the foo.bar module'
> EOF
$ bin/python -c 'from foo import bar; print(bar)'
from the foo package
$ bin/python -c 'import foo.bar; from foo import bar; print(bar); print(bar.baz)'
<module 'foo.bar' from 'foo/bar.py'>
from the foo.bar module

关于python - 如果 X 中有多个 Y,Python 究竟如何解析 "from X import Y"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38520210/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com