5

次の例のどれがPythonコミュニティ内でより受け入れられているのか疑問に思いました。

1.1。

return any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts)

2.2。

if any(host[0].endswith(bot_hosts) for bot_hosts in bot_hosts):
    return True
else:
    return False

それとも何か他のもの?

お知らせ下さい。

4

3 に答える 3

4

あなたの例の場合:str.endswith引数としてタプルを取ります。全体として、デザインパターンとして最初のバージョンを使用します(理由@Benの回答を確認してください)。それはany(host[0].endswith(bot_host) for bot_host in bot_hosts)次と同じです:

host[0].endswith(bot_hosts) #if bot_hosts is a tuple
                            #if bot_hosts in not a tuple add tuple(bot_hosts)

例:

In [1]: suffs = ('a','b','d')

In [2]: 'asd'.endswith(suffs)
Out[2]: True

In [3]: 'asap'.endswith(suffs)
Out[3]: False
于 2013-01-16T07:12:58.133 に答える
4
if <anything>:
    return True
else:
    return False

通常、非常に無意味です。<anything>とにかく真実または虚偽の何かを返さなければならないので、それを返すだけです。

これを実行する唯一の理由は、他のオブジェクトを返す可能性があるため、Trueまたはのみを返すようにする場合です。たとえば、大きなオブジェクトが返される可能性がありますが、そこにあることを確認した後は気にしないため、メモリの再利用を妨げる可能性のある参照を返さない方がよいでしょう。または、オブジェクトまたはを返す可能性があります。falseの場合、後のコードでテストが使用されることが懸念され、falseパスがとしてカウントされないようにする必要があります。False<anything><anything>NoneNoneis not NoneNone

それでも(pokeがコメントで指摘しているように)、の真実性に基づいてbool(<anything>)保証される値を取得するTrueために使用できるため、またはのいずれかをすぐに返すステートメントを使用する正当な理由はありません。False<anything>ifTrueFalse

あなたの場合、any常にTrueまたはを返しますFalse。したがって、文字通りまたはのいずれかの値があり、どちらであるTrueFalseを確認してから、そうである場合は戻りTrue、そうである場合は戻りTrueます。FalseFalse

于 2013-01-16T07:17:13.287 に答える
1

2番目のバージョンは完全にリリースされています。これは、ブール値をTrueと比較して、それがtrueかどうかを確認するようなものです。私が個人的に行うことは、代わりにループを使用することです。つまり、これを少し読みやすくするために、反復部分を各要素で実行される部分から分離します。

于 2013-01-16T07:17:15.527 に答える