7

你能解释一下“return 0”和“return”之间的区别吗?例如:

do_1():
    for i in xrange(5):
        do_sth()
    return 0

do_2():
    for i in xrange(5):
        do_sth()
    return 

上面两个函数有什么区别?

4

5 回答 5

7

取决于使用情况:

>>> def ret_Nothing():
...     return
... 
>>> def ret_None():
...     return None
... 
>>> def ret_0():
...     return 0
... 
>>> ret_Nothing() == None
True
>>> ret_Nothing() is None  # correct way to compare values with None
True
>>> ret_None() is None
True
>>> ret_0() is None
False
>>> ret_0() == 0
True
>>> # and...
>>> repr(ret_Nothing())
'None'

而正如提克多玛所说0不等于None。但是,在布尔上下文中,它们都是False

>>> if ret_0():
...     print 'this will not be printed'
... else:
...     print '0 is boolean False'
... 
0 is boolean False
>>> if ret_None():
...     print 'this will not be printed'
... else:
...     print 'None is also boolean False'
... 
None is also boolean False

更多关于 Python 中的布尔上下文:真值测试

于 2012-09-10T11:51:59.090 回答
4

在 Python 中,每个函数都隐式或显式地返回一个返回值。

>>> def foo():
...     x = 42
... 
>>> def bar():
...     return
... 
>>> def qux():
...     return None
... 
>>> def zero():
...     return 0
... 
>>> print foo()
None
>>> print bar()
None
>>> print qux()
None
>>> print zero()
0

如您所见,foobar返回qux完全相同的内置常量None

  • foo返回None是因为return缺少语句,并且None如果函数没有显式返回值,则它是默认返回值。

  • bar返回None是因为它使用了return没有参数的语句,它也默认为None.

  • qux返回None,因为它明确地这样做了。

zero然而完全不同并返回整数0

如果评估为 booleans0并且None两者都评估为False,但除此之外,它们是非常不同的(实际上是不同的类型NoneTypeint)。

于 2012-09-30T19:21:58.793 回答
3
def do_1():
    return 0

def do_2():
    return

# This is the difference
do_1 == 0 # => True
do_2 == 0 # => False
于 2012-09-10T09:22:26.000 回答
3

在 python 中,函数将None显式或隐式返回。

例如

# Explicit
def get_user(id):
    user = None
    try:
        user = get_user_from_some_rdbms_byId(id)
    except:
        # Our RDBMS raised an exception because the ID was not found.
        pass
    return user  # If it is None, the caller knows the id was not found.

# Implicit
def add_user_to_list(user):
    user_list.append(user)   # We don't return something, so implicitly we return None

0由于某些计算,python 函数会返回:

def add_2_numbers(a,b):
    return a + b      # 1 -1 would return 0

或者因为magic旗帜之类的东西,这是不受欢迎的。

但在 python 中,我们不用0来表示成功,因为:

if get_user(id):

True如果我们返回,则不会评估,0因此该if分支将不会运行。

In [2]: bool(0)
Out[2]: False
于 2012-09-10T10:16:18.173 回答
2

它与python没有任何关系。

每当您执行一个函数时,您都可以选择返回一个值。

关键字是return通知函数是否应该返回值的信息。

如果没有给 thereturn赋值或没有分配要返回的变量,则返回值为None

如果您分配一个值,在这种情况下,0要返回,那么该值0将由函数返回,当return达到关键字和值时,函数将结束。

有关以下内容的更多信息0:使用 a 的原因0是因为返回0“成功”的函数和非零返回值要么只是要返回的值,要么有时是函数未正确执行时的错误代码,这是司空见惯的.

于 2012-09-10T09:25:35.737 回答