gpt4 book ai didi

python - 为什么 Python 的导入不能像 C 的#include 那样工作?

转载 作者:太空狗 更新时间:2023-10-29 15:48:49 25 4
gpt4 key购买 nike

从字面上看,我已经尝试理解 Python 导入大约一年了,而且我几乎放弃了使用 Python 进行编程,因为它看起来太模糊了。我有 C 语言背景,我假设 import#include 一样工作,但如果我尝试导入某些东西,我总是会出错。

如果我有两个这样的文件:

foo.py:

a = 1

bar.py:

import foo
print foo.a
input()

为什么我需要引用模块名称?为什么不能只写import fooprint a?这种混淆的意义何在?为什么不运行代码并为您定义一些东西,就好像您将它写在一个大文件中一样?为什么它不能像 C 的 #include 指令那样工作,它基本上是复制和粘贴您的代码?我在 C 中没有导入问题。

最佳答案

做你想做的,你可以使用(不推荐,进一步阅读解释):

from foo import *

这会将所有内容导入您当前的命名空间,您将能够调用 print a

但是,这种方法存在以下问题。考虑一下您有两个模块 moduleAmoduleB 的情况,每个模块都有一个名为 GetSomeValue() 的函数。当你这样做时:

from moduleA import *
from moduleB import *

您遇到命名空间解析问题*,因为您实际调用的函数是 GetSomeValue()moduleA.GetSomeValue() 还是 moduleB。 GetSomeValue()?

除此之外,您还可以使用导入为功能:

from moduleA import GetSomeValue as AGetSomeValue
from moduleB import GetSomeValue as BGetSomeValue

或者

import moduleA.GetSomeValue as AGetSomeValue
import moduleB.GetSomeValue as BGetSomeValue

此方法手动解决冲突。

我相信您会从这些示例中了解到显式引用的必要性。

* Python有它的命名空间解析机制,这里只是为了解释的目的而简化。

关于python - 为什么 Python 的导入不能像 C 的#include 那样工作?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/22408302/

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