gpt4 book ai didi

python - 在 python 文件之间共享代码

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

假设我有以下文件:

-- classes.py
-- main.py
-- commands.py
-- output.py

main.py 是使用来自classescommandsoutput 的代码的主文件。 commandsclasses 中定义的对象作为功能输入,并访问这些对象的方法/属性。 命令 都使用在output 中定义的函数。

问题:我是否需要在依赖于它们的每个文件中导入这些模块中的每一个?即:我是否需要在 classescommandsmain 中导入 output?或者 classesoutputcommands 都导入到 main 中的事实是否意味着它们没有需要单独导入吗?

处理具有相互依赖性的多个文件的最佳实践是什么?

最佳答案

The question: do I need to import each of these modules in each of the files that depend on them? i.e.: do I need to import output in both classes, commands, and main?

是的,这是要走的路。

Or would the fact that classes, output, and commands are all imported into main mean that they don't need to be imported individually?

没有。

Python 文件是模块。 python 模块有一个符号表。模块中指定的每个函数、类和变量都在这个表中。模块只能使用此表中的内容以及 Python 内置函数。

例如classes.py:

def function(): pass
class Class(object): pass

有符号表:

{
'function': function,
'Class': Class
}

您只能在 classes.py 中使用 functionClass(加上提到的内置函数)。您不能隐式访问此模块之外的任何内容,Python 没有像 C# 和 Java 那样的任何命名空间概念。如果您需要来自不同文件(模块)的任何内容,则必须显式导入它。

现在“导入”时到底发生了什么?

一些非常简单的事情 - 导入的模块“成为”模块本身的一部分!

在下一个示例中,我们有 output.py:

def output_function(): pass

带符号表:

{
'output_function': output_function
}

classes.py:

import output
from output import output_function

def function(): pass
class Class(object): pass

带符号表:

{
'Class': Class,
'function': function,
'output': {
'output_function': output_function
}
'output_function': output_function
}

其中 'output' 的值实际上是 'output' 的符号表(完全相同的对象)!

你甚至可以在不同的模块中做:

import classes

classes.output.output_function()

但不要,明确说明您的导入。

这听起来可能有点奇怪,但这就是 Python 的工作方式。请注意,涉及的内容更多,例如,当您第一次导入模块时,它会被执行等等......

关于python - 在 python 文件之间共享代码,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/38980899/

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