43

私はPythonを学んでいて、次のようなコードを書く方法があるかどうか疑問に思っていました。

def f(x):
    if x>1:
       return(x)
    else:
        # don't return anything

コードの他の部分について質問しています。返品が受け入れられない場合x<=1は、何も返品する必要はありません。None

4

10 に答える 10

65

Pythonには「何も返さない」というようなものはありません。すべての関数は何らかの値を返します(例外が発生しない限り)。明示的なreturnステートメントが使用されていない場合、Pythonはそれをを返すものとして扱いNoneます。

ですから、あなたは自分の機能に最も適切なものを考える必要があります。None(または他の番兵値)を返し、これを検出するために呼び出し元のコードに適切なロジックを追加するか、例外を発生させる必要があります(必要に応じて呼び出し元のコードがキャッチできます)。

于 2013-03-27T01:49:53.200 に答える
14

文字通り「nothing」をpass返すには、を使用します。これは、関数に入れられた場合、基本的に値Noneを返します(関数は値を返す必要があるため、「nothing」を返さないのはなぜですか)。ただし、これは明示的に、return None自分で行うことができます。

だからどちらか:

if x>1:
    return(x)
else:
    pass

また

if x>1:
    return(x)
else:
    return None

トリックを行います。

于 2013-03-27T01:49:41.213 に答える
4

何も返さないようなものはありませんが、空のreturnステートメントを使用して、実行しようとしていることを実行できます。を返しますNone

以下の例を見ることができます:

if 'account' in command:
    account()

def account():
    talkToMe('We need to verify your identity for this. Please cooperate.')
    talkToMe('May I know your account number please?')
    acc_number = myCommand()
    talkToMe('you said your account number is '+acc_number+'. Is it right?')
    confirmation = myCommand()
    if confirmation!='yes' or 'correct' or 'yeah':
        talkToMe('Let\'s try again!')
        account()
    else:
        talkToMe('please wait!')
    return

これにより、呼び出し元の関数には何も返されませんが、実行が停止され、呼び出し元の関数に到達します。

于 2019-08-24T12:11:51.013 に答える
3

これはどう?

def function(x):
     try:
         x = x+1
         return (x)
     except:
         return ('')
于 2017-11-30T22:42:38.487 に答える
2

あなたはこのようなことをすることができます:

>>> def f(x):
...    return x if x>1 else None
... 
>>> f(1),f(2)
(None, 2)

'何も返さない'ように見えます:

>>> f(1)
>>> 

しかし、代替案でさえNoneを返します。

>>> def f2(x): 
...    if x>1: return x
... 
>>> f2(1),f2(2)
(None, 2)

または:

>>> def f2(x):
...    if x>1: 
...        return x
...    else:
...        pass
... 
>>> f2(1),f2(2)
(None, 2)

したがって、どのように記述しても、機能的には同じです。

于 2013-03-27T02:31:47.537 に答える
1

他の人が上で述べたように、あなたの場合は常にNoneを返します。ただし、Noneタイプを返したくない場合は、空白に置き換えることができます。

def test(x):
    x> 1の場合:
        return(x)
    そうしないと:
        print('')を返す
于 2019-09-05T09:12:20.777 に答える
0

filterでラムダ関数を使用して、if条件を渡す値のリストを返すことができます。

例:

    myList = [1,20,5,50,6,7,2,100]
    result = list(filter(lambda a: a if a<10 else None, (item for item in myList)))
    print(result)

出力:

    [1,5,6,7,2]
于 2019-04-24T18:49:40.897 に答える
0

ヒントがあるかもしれません!print(f(x))と書くと、戻り値がない場合はNoneが出力されますが、「print」なしで関数を呼び出し、代わりに関数に「print(s)」と書くと、値なし

于 2020-06-16T00:09:00.827 に答える
0

リターンchr(0) 原因0を使用できますASCIIが、文字がないため、空白のままになります

于 2021-12-20T14:26:27.333 に答える
0

すべての答えに追加するために、関数を返さない唯一の実際の方法は、例外を発生させることです。少なくとも、何も返さなかった後でもプログラムを実行する必要がある限り。

したがって、コードは次のようになります。

def f(x):
    if x>1:
        return x
    raise Exception

else(条件が満たされた場合はすでに値を返しているため、例外を発生させるためにブロックを使用しなかったことに注意してください。ただし、これはelseブロックで行うこともできます)

テスト実行時:

num1 = f(2)    # 2
num2 = f(0)    # Unbound; and error raised

Noneこれは、一部の条件に対してもオプションを返し続け、他の条件に対しては何も返さない場合に役立ちます。

def f(x):
    if x > 0:
        return x
    elif x == 0:
        return None  # pass
    raise Exception

>>> num1 = f(1)  # 1
>>> num2 = f(0)  # None
>>> num3 = f(-1) # Unbound; and error raised

プログラムを終了してエラーを表示したくない場合は、関数の外部で例外をキャッチさせることができます。

try:
    num = f(0)
except:
    pass

このようにしてf(0)、例外が発生した場合(それが発生する場合)、それはexceptブロックとしてキャッチされ、プログラムを楽しく続行できます。これは、バインドされてnumいないだけでなく、バ​​インドされていないことを確認してください。None


興味深い事実:

何も返さない他の唯一の方法は、おそらく単にプログラムを終了することexit()ですquit()。コードエディタでリターンタイプを確認するexit()と、通常の関数で表示される場合とは異なり、が表示されます:)quit()NoReturnNone

于 2022-02-05T20:48:10.793 に答える