【问题标题】:Running function code only when NOT assigning output to variable?仅在未将输出分配给变量时运行功能代码?
【发布时间】:2018-12-14 06:35:23
【问题描述】:

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

类似这样的:

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

function()

A=function()

我第一次调用function() 它应该在屏幕上显示a,而第二次调用print 时应该什么都没有,并且只将返回的值存储到A

我没有尝试过任何东西,因为我是 Python 的新手,但我想象它会类似于 if __name__=='__main__': 检查脚本是用作模块还是直接运行的方式。

【问题讨论】:

  • 函数不是这样工作的。他们不知道他们的返回值会发生什么。如果您想改变他们的行为,请使用参数。在您的情况下,最好在函数之外进行打印:print(function())
  • 嗨,Aris,您能否解释一下“停止代码的某些部分”是什么意思?您希望指令停止执行流程,还是避免它们?无论如何,我认为在 python 中无法实现这样的行为,因为在函数调用的范围内,没有迹象表明您将如何处理返回的值。您必须为函数提供一个参数,告诉它使用默认值跳过/停止以简化调用。 python def call_and_skip(skip_instructions=False): if not skip_instructions: call_stuff_or_not() call()
  • @zesk:我建议您删除您的评论并将其发布为答案-可能会得到一些分数!
  • @martineau:好的,让我们这样做:)

标签: python return variable-assignment


【解决方案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 

【讨论】:

    【解决方案2】:

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

    对于像您的示例 sn-p 这样的简单案例,显而易见的解决方案是从函数中删除 print 调用并将其留给调用者,即:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2014-05-31
      • 2020-05-27
      • 1970-01-01
      • 2020-08-19
      • 1970-01-01
      • 1970-01-01
      • 2017-09-28
      • 2012-12-12
      相关资源
      最近更新 更多