2024-04-27 18:16:39 发布
网友
为了保持整洁,我想在一个单独的文件中定义一组命令。你知道吗
def cmd1(): print("calling cmd1") import define_cmd2 cmd2()
然后定义\u cmd2.py:
cmd1() def cmd2(): print("called cmd2")
它告诉我cmd1()没有定义。如何调用import,以便使用/编辑/调用在import调用之前定义的内容?你知道吗
cmd1()
您应该先了解一下Python导入是如何工作的。你知道吗
第一次调用模块上的import时,它会被执行。结果名称空间以及所有函数和变量定义用于创建在名称空间中引用的模块对象,以及在sys.modules中引用的模块对象。下次导入时,导入只引用sys.modules中的现有模块。你知道吗
import
sys.modules
为了避免由循环导入引起的错误,实际上在运行代码之前首先创建module对象,这样进一步的导入就可以在sys.modules中看到一个现有的模块,而不会反复尝试重新执行相同的代码。你知道吗
在特定情况下,如果要使用define_cmd1的内容,则需要显式地从define_cmd1导入define_cmd2。其次,需要正确引用导入的名称:
define_cmd1
define_cmd2
定义cmd1:
def cmd1(): print("calling cmd1") import define_cmd2 define_cmd2.cmd2()
定义cmd2
import define_cmd1import define_cmd1.cmd1() def cmd2(): print("called cmd2")
粗体项目是您需要添加的代码位。你知道吗
为了澄清,下面是运行define_cmd时将发生的情况:
define_cmd
def
define_cmd1.cmd1
sys.modules['define_cmd1']
define_cmd1.cmd1()
define_cmd2.cmd2
python文件(例如define_cmd2.py)是/应该是自包含的。一个非常基本的要求是,如果希望使用名为cmd1的函数,则必须在define_cmd2.py或在调用函数之前导入的某个文件中定义它。你知道吗
define_cmd2.py
cmd1
不过,这听起来更像是XY problem。你到底想做什么?你知道吗
您应该先了解一下Python导入是如何工作的。你知道吗
第一次调用模块上的
import
时,它会被执行。结果名称空间以及所有函数和变量定义用于创建在名称空间中引用的模块对象,以及在sys.modules
中引用的模块对象。下次导入时,导入只引用sys.modules
中的现有模块。你知道吗为了避免由循环导入引起的错误,实际上在运行代码之前首先创建module对象,这样进一步的导入就可以在
sys.modules
中看到一个现有的模块,而不会反复尝试重新执行相同的代码。你知道吗在特定情况下,如果要使用
define_cmd1
的内容,则需要显式地从define_cmd1
导入define_cmd2
。其次,需要正确引用导入的名称:定义cmd1:
定义cmd2
粗体项目是您需要添加的代码位。你知道吗
为了澄清,下面是运行
define_cmd
时将发生的情况:def
语句将创建一个函数define_cmd1.cmd1
。你知道吗import
将尝试加载define_cmd2
define_cmd2
中的import
将不起任何作用,因为sys.modules['define_cmd1']
已经存在,这意味着它已被加载或正在加载。你知道吗define_cmd1.cmd1()
将运行。你知道吗def
语句将创建一个函数define_cmd2.cmd2
define_cmd1
define_cmd2.cmd2
python文件(例如
define_cmd2.py
)是/应该是自包含的。一个非常基本的要求是,如果希望使用名为cmd1
的函数,则必须在define_cmd2.py
或在调用函数之前导入的某个文件中定义它。你知道吗不过,这听起来更像是XY problem。你到底想做什么?你知道吗
相关问题 更多 >
编程相关推荐