【问题标题】:Python return values?Python返回值?
【发布时间】:2026-01-19 11:20:03
【问题描述】:

我该怎么做? 可以我这样做吗?

def aFunction(argument):  
    def testSomething():  
        if thisValue == 'whatItShouldBe':  
            return True  
        else:  
            return False  

    if argument == 'theRightValue': # this is actually a switch using elif's in my code  
        testSomething()  
    else:  
        return False  

def aModuleEntryPoint():  
    if aFunction(theRightValue) == True:  
        doMoreStuff()  
    else:  
        complain()  

aModuleEntryPoint()

aModuleEntryPoint() 在开始做事之前需要首先确保一个条件为真。由于封装,aModuleEntryPoint 不知道如何检查条件,但aFunction() 有一个名为testSomething() 的子函数,它知道如何检查条件。 aModuleEntryPoint() 致电 aFunction(theRightValue)

因为theRightValue 作为参数传递给aFunction(),所以aFunction() 调用testSomething()testSomething() 执行逻辑测试,并返回 TrueFalse

我需要aModuleEntryPoint() 知道testSomething() 决定了什么。我不想让aModuleEntryPoint() 知道testSomething() 是如何得出结论的。

在删除其他功能和其他功能的同时发布我的实际来源实际上是一项成就,因此我必须像这样设置一般要点。

【问题讨论】:

  • 感谢@Eimantas,这让我的头现在不那么痛了:)

标签: python function return-value


【解决方案1】:

我现在唯一看到的错误是在第 9 行的 testSomething() 之前需要一个 return

【讨论】:

  • 注意力持续时间短。我试图编辑,然后忘记了函数的名称:^\
  • 完美!我在开关中添加了 return testSomething() ,并按预期工作。 :-)
【解决方案2】:

也许这里的子函数不是适合你的封装工具。您希望将内部功能公开给外部实体。 Python 类提供了一种比子函数更好的机制来表达这一点。拥有一个类,您可以以非常可控的方式公开您想要的任何内部功能部分。

【讨论】:

  • 谢谢!当我没有时间限制时,我会稍微试一试。
【解决方案3】:

查看您的代码时,我的第一个想法是它有点太复杂了。为什么有aFunction?你可以写

def aModuleEntryPoint():
    argument = ...
    if argument in (theRightValue, theOtherRightValue, theOtherOtherRightValue)\
       and testSomething():
        doMoreStuff()
    else:
        complain()  

这个if 子句将首先检查argument 是否是可能的正确值之一,如果是,那么它将继续调用testSomething() 并检查它的返回值。只有当返回值为真时,它才会调用doMoreStuff()。如果任何一个测试失败(这就是我使用and 的原因),它会complain()

【讨论】:

  • 就像我在帖子中提到的那样,因为数据封装,aFunction() 知道如何做其他人不知道的事情。在现实生活中,aFunction() 被称为 control()。它的目的是控制与 sql 的连接。 testSomething() 被称为 checkConnection(),它在程序的用户经历输入数据的麻烦之前验证到数据库的链接是否良好,只是被告知链接失败。
  • @brad:好的,从您的问题中并不清楚aFunction 包含足够的代码来证明使其成为自己的功能是合理的。