1

次の 2 つのコード ブロックに機能上の違いはありますか? 私は主に、関数が呼び出される順序に関心があります。if関数は最初のステートメントで順番に実行されますか?

初め、

if func1() and func2() and func3() and func4():
    do stuff

2番、

if func1():
    if func2():
        if func3():
            if func4():
                do stuff
4

1 に答える 1

6

はい、Python は式を左から右に評価します。関数は同じ順序で呼び出されます。リファレンス ドキュメントから:

Python は式を左から右に評価します。

さらに、式を使用する場合とネストする場合の両方で、false 値が返されたfunc2()場合は呼び出されません。ブール演算のドキュメントを引用:func1()andif

x and yは最初に評価されxます。が false の場合x、その値が返されます。それ以外の場合yは評価され、結果の値が返されます。

func1() and func2()では、 false の値が返されたfunc2()場合は評価されないため、は一切呼び出されません。func1()func2()

all()関数を使用して、ここで 3 番目の代替手段を使用できます。

functions = (func1, func2, func3, func4)
if all(f() for f in functions):

これも、前の関数が真の値を返し、関数を順番に呼び出す限り、関数のみを呼び出します。

このall()アプローチでfunc1、 、func2func3、およびfunc4が を呼び出す前にすべて実際に定義されている必要がありますall()が、ネストされたiforand式のアプローチでは、前の関数が真の値を返す限り、関数を定義する必要があるだけです。

于 2013-11-11T18:31:08.147 に答える