2

次のような関数宣言があります。

def function(list_of_objects = None)

*list_of_objects* が渡されない (None) 場合は、空のリストのように定義する必要があります。明示的な方法は次のとおりです。

def function(list_of_objects = None):
    if not list_of_objects:
        list_of_objects = list()

また

def function(list_of_objects = None):
    list_of_objects = list() if not list_of_objects else list_of_objects

上記のコードは次のコードと同じですか?

def function(list_of_objects = None):
    list_of_objects = list_of_objects or list()

調べてみたけどまだよくわからない

>>> def func(my_list = None):
...     my_list = my_list or list()
...     print(type(my_list), my_list)
... 
>>> func()
(<type 'list'>, [])
>>> func(['hello', 'world'])
(<type 'list'>, ['hello', 'world'])
>>> func(None)
(<type 'list'>, [])
>>> 
4

3 に答える 3

7

いいえ、None唯一の false オブジェクトではないためです。[]()0、そしてもちろんも含まれていますFalse

于 2013-01-20T23:43:57.390 に答える
3

慣用的な方法は次のとおりです。

def function(list_of_objects=None):
    if list_of_objects is None:
        list_of_objects = []

Noneはシングルトンなので、is演算子を使用して比較できます。

コードは真偽をテストしますlist_of_objects(この場合、 alliforvariant は同等です)。Python では、次の値は false と見なされます

  • なし

  • 間違い

  • 0、などの任意の数値型のゼロ。0.00j

  • ''、などの空のシーケンス。()[]

  • などの空のマッピング{}

  • __bool__()クラスがまたは__len__()メソッドを定義している場合、そのメソッドが整数ゼロまたはブール値 False を返す場合、ユーザー定義クラスのインスタンス。

他のすべての値は true と見なされます。したがって、多くのタイプのオブジェクトは常に true です。

于 2013-01-21T00:05:27.057 に答える
2

通常のプラクティスは次のとおりです。

def function(list_of_objects=None):
    if list_of_objects is None:
        list_of_objects = []
    ...

空のリストや空のタプルなどの他の false 値と簡単に区別できるため、Noneを使用します。

Noneis Noneはシングルトンであるため、等価テストの代わりにテストを使用します(これはPEP 8に従って推奨される方法です)。

于 2013-01-21T00:27:37.527 に答える