【问题标题】:Allowing imported python functions to call other imported python functions [closed]允许导入的python函数调用其他导入的python函数[关闭]
【发布时间】:2020-05-11 07:07:45
【问题描述】:

这是我第一次导入自己的脚本,我对导入的函数如何与其他导入的函数进行交互有一些疑问。这是我的脚本目前的样子:

from file1 import function1
from file2 import function2

function1()

函数 1 看起来像这样:

def function1():
    option = input('Option: ')
    if option == 'function 2':
        function2()

函数 2 看起来是这样的:

def function2():
    option = input('Option: ')
    if option = 'function 1':
        function1()

每当我运行它时,它都会给我一个未定义 function2 的错误。我尝试将两个脚本相互导入,但这会导致循环导入。我这样做的主要目的只是为了更好地组织一个脚本的功能,所以我想知道是否有办法让两个导入的函数相互引用,或者我是否应该忘记它。

【问题讨论】:

  • 请分享所有相关代码以及您的项目设置方式 - 我确信您需要的东西可以完成,但如果您不这样做,就不可能告诉您您做错了什么不要告诉我们你在做什么。
  • 您似乎认为 python 使用类似动态范围的东西。它没有,它使用 lexical 范围。您的function1 将尝试在定义位置而不是调用位置的范围内搜索function2。如果你需要function1 来调用function2,它必须能够访问它,要么作为参数传递,要么在它可以到达的某个范围内可用(全局,封闭)。
  • @Grismar 我编辑了帖子以包含更多信息

标签: python function import


【解决方案1】:

如果function1调用function2,则function2必须导入file1.py

您的项目布局应按如下方式组织:

file1.py

from file2 import function2

def function1():
    # function 1 logic
    if condition: 
        function2()

file2.py

def function2():
    # function2 logic

main.py

from file1 import function1

function1()

【讨论】:

  • 我很抱歉我应该在我最初的帖子(现已编辑)中澄清函数 2 引用函数 1 以及函数 1 引用函数 2。每当我使用此方法时,它都会导致循环导入错误,因为两个函数相互导入。
  • 你确定这就是你想要的吗?它可能会导致递归函数调用。你想达到什么目的?也许有更好的实现
  • 所以本质上,功能 1 是一个带有 n 个选项的菜单,如果选择了某个选项,它将运行从不同文件导入的功能。所有这些功能依次返回功能 1,因为它们都有返回菜单的选项。我可以将所有这些都包含在一个文件中,但我正在尝试更多地了解 Python 并完成这个项目,而且我还发现额外的组织非常好。
  • @madamepsychosis 那么你应该把它们放在同一个模块中。
  • 我看不出为什么所有这些函数都必须调用 function1。他们确实必须将值返回给function1,然后该值将在function1内部进行处理。
猜你喜欢
  • 2022-08-19
  • 1970-01-01
  • 1970-01-01
  • 2020-11-09
  • 1970-01-01
  • 2013-01-28
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多