【问题标题】:In python, return value only when the function is used in an assignment [duplicate]在python中,仅当函数用于赋值时才返回值[重复]
【发布时间】:2015-06-13 02:58:11
【问题描述】:

我想做这样的事情:

def f():
    if assignment_requested: return "Return something"
    else: print "Return nothing"

应该给出:

>>> f()
Return nothing
>>> a = f()
>>> print a
Return something

我找不到任何方法来检查该函数是单独调用f() 还是用于分配变量a=f()有没有办法做到这一点?

例如,在 Matlab 中,可以使用if nargout>0

【问题讨论】:

  • 这有什么关系?如果不使用返回值,您认为会发生什么情况?
  • @user,一件事是它在屏幕上打印,这可能很烦人。第二件事是,您可能希望函数根据是否使用返回来实际执行不同的操作。
  • Python 只在交互式提示符下将值打印到屏幕上,如果你想抑制它,你可以做类似_ = whatever() 而不是whatever()

标签: python


【解决方案1】:

您不能也不应该担心这一点。如果这是一个问题,请使用不同的函数或让您的函数接受一个控制返回内容的参数。

分配范围广泛且多种多样,可以包括再次明确丢弃的分配。例如,如果您的函数用于比较表达式:

if f() == 'Return something':

没有赋值,但是返回值很重要

使用不同的功能:

def f_with_return():
    return 'something'

def f_without_return():
    f_with_return()  # ignores the return value!
    print "I won't return something"

或参数:

def f(return_something=True):
    if return_something:
        return 'something'
    print "I won't return something"

让您控制返回的内容。

但是,如果您没有明确返回任何内容,Python 仍然会返回一个值None

【讨论】:

  • 感谢您的回答。基本上,这不是python的一个特性,但我不明白为什么它不应该有它。我不懂哲学。
  • 在 Python 中控制返回值没有任何优势,因为对象生命周期是通过引用计数来控制的,而不是通过对名称的分配来控制。因此,除了赋值之外,还有更多方法可以使用来自函数的返回值,并且必须解释所有工作的方式会很快变得丑陋。此外,Matlab 中 nargs 的所有用例都可以在 Python 中轻松地以不同方式处理,那么为什么要添加一个会使对所发生情况的理解变得复杂的功能呢?
猜你喜欢
  • 1970-01-01
  • 2011-02-21
  • 2021-11-16
  • 1970-01-01
  • 2020-02-20
相关资源
最近更新 更多