Python模块使用imp之前定义的函数

2024-04-27 18:16:39 发布

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

为了保持整洁,我想在一个单独的文件中定义一组命令。你知道吗

def cmd1():
    print("calling cmd1")

import define_cmd2

cmd2()

然后定义\u cmd2.py:

cmd1()

def cmd2():
    print("called cmd2")

它告诉我cmd1()没有定义。如何调用import,以便使用/编辑/调用在import调用之前定义的内容?你知道吗


Tags: 文件pyimport命令编辑内容定义def
2条回答

您应该先了解一下Python导入是如何工作的。你知道吗

第一次调用模块上的import时,它会被执行。结果名称空间以及所有函数和变量定义用于创建在名称空间中引用的模块对象,以及在sys.modules中引用的模块对象。下次导入时,导入只引用sys.modules中的现有模块。你知道吗

为了避免由循环导入引起的错误,实际上在运行代码之前首先创建module对象,这样进一步的导入就可以在sys.modules中看到一个现有的模块,而不会反复尝试重新执行相同的代码。你知道吗

在特定情况下,如果要使用define_cmd1的内容,则需要显式地从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时将发生的情况:

  1. def语句将创建一个函数define_cmd1.cmd1。你知道吗
  2. import将尝试加载define_cmd2
  3. define_cmd2中的import将不起任何作用,因为sys.modules['define_cmd1']已经存在,这意味着它已被加载或正在加载。你知道吗
  4. define_cmd1.cmd1()将运行。你知道吗
  5. def语句将创建一个函数define_cmd2.cmd2
  6. 返回到加载define_cmd1
  7. 运行define_cmd2.cmd2

python文件(例如define_cmd2.py)是/应该是自包含的。一个非常基本的要求是,如果希望使用名为cmd1的函数,则必须在define_cmd2.py或在调用函数之前导入的某个文件中定义它。你知道吗

不过,这听起来更像是XY problem。你到底想做什么?你知道吗

相关问题 更多 >