次の Python コードがあるとします。
def avg(a):
if len(a):
return sum(a) / len(a)
avgの長さaがゼロの場合、またはその動作が言語によって指定されていないため、Python コードでカウントされるべきではない場合の言語定義の動作は何ですか?
デフォルトの戻り値はNoneです。
Callsのドキュメントから:
呼び出し
Noneは、例外が発生しない限り、常に何らかの値 (おそらく ) を返します。この値がどのように計算されるかは、呼び出し可能なオブジェクトのタイプによって異なります。
の場合、それlen(a)は- のような値0として扱われ、ステートメントには到達しません。明示的なステートメントに到達せずに制御の流れが関数の下部から抜け出すと、Python 関数は暗黙的に次の値を返します。FalsereturnreturnNone
>>> print(avg([]))
None
が定義されていない場合len(a)- つまり、オブジェクトに__len__()メソッドがない場合 - を取得しますTypeError:
>>> print(avg(False))
Traceback (most recent call last):
File "<stdin>", line 1, in <module>
File "<stdin>", line 2, in avg
TypeError: object of type 'bool' has no len()