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 

上記の2つの機能の違いは何ですか?

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'

そして、Tichodromaが述べたように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

ご覧のとおりfoobarquxはまったく同じ組み込み定数 を返しNoneます。

  • foo関数が明示的に値を返さNoneない場合のデフォルトの戻り値です。returnNone

  • barNone引数なしのステートメントを使用しているため、戻ります。returnこれもデフォルトでNoneです。

  • quxNone明示的にそうするので、戻ります。

zeroただし、完全に異なり、整数0を返します。

booleansとして評価され0、両方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

Python 関数は0、何らかの計算のために次のいずれかを返します。

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

または、magic眉をひそめている旗のようなもののために。

0しかし、Python では、次の理由から成功を示すために使用しません。

if get_user(id):

True返された場合は評価されない0ため、このifブランチは実行されません。

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

特にpythonとは何の関係もありません。

関数を実行するたびに、オプションで値を返すことができます。

キーワードは、return値を返す必要があるかどうかを関数に通知するものです。

に値が指定されていreturnないか、返される変数が割り当てられていない場合、戻り値はNone

この場合、0返される値を割り当てると、関数によって値が返され、キーワードと値に到達0すると関数が終了します。return

についての詳細情報0: a が使用される理由は、返される関数が「成功」し、ゼロ以外の戻り値が単に返される値であるか、関数が正しく実行されなかった場合のエラー コードである0ことが一般的であるためです。0.

于 2012-09-10T09:25:35.737 に答える