仅在不将输出分配给变量时才运行功能代码?

时间:2018-12-14 06:35:24

标签: python return variable-assignment

我正在寻找一种在python中停止函数内部代码某些部分的方法,但是仅当函数的输出分配给变量时才可以。如果该函数在没有任何分配的情况下运行,则应在函数内部全部运行。

类似这样的东西:

def function():
    print('a')
    return ('a')

function()

A=function()

我第一次呼叫function()时,它应该在屏幕上显示a,而第二次呼叫print时则什么也不应该,只存储返回到A的值。 / p>

自从我是Python的新手以来,我还没有尝试过任何东西,但我想像是一种if __name__=='__main__':检查脚本是否被用作模块还是直接运行的方法。

2 个答案:

答案 0 :(得分:1)

我认为在python中无法实现这种行为,因为在函数调用的范围内,没有迹象表明您将如何处理返回的值。 您必须为该函数提供一个参数,告诉它使用默认值跳过/停止以简化调用。

def call_and_skip(skip_instructions=False): 
    if not skip_instructions: 
        call_stuff_or_not() 
    call_everytime()

call_and_skip()
# will not skip inside instruction

a_variable = call_and_skip(skip_instructions=True)
# will skip inside instructions 

答案 1 :(得分:0)

正如评论中已经提到的那样,您所要求的在技术上是不可能的-函数具有(也不能具有)调用代码将如何处理返回值的任何知识。

对于像您的示例代码段这样的简单情况,显而易见的解决方案是仅从函数内删除print调用,并将其留给调用方,即:

def fun():
   return 'a'

print(fun())

现在,我假设您的实际代码比这要复杂一些,因此这种简单的解决方案将无法工作。在这种情况下,解决方案是将原始函数拆分为许多不同的函数,然后让调用者选择要调用的部分。如果需要在不同部分之间共享复杂状态(局部变量),则可以将整个内容包装到一个类中,将子函数转换为方法并将这些变量存储为实例属性。