Mam metodę, która czasami zwraca wartość NoneType. Jak mogę zakwestionować zmienną, która jest typu NoneType? Na przykład muszę użyć metody if
if not new:
new = '#'
Wiem, że to zły sposób i mam nadzieję, że rozumiesz, co miałem na myśli.
Mam metodę, która czasami zwraca wartość NoneType. Jak mogę zakwestionować zmienną, która jest typu NoneType? Na przykład muszę użyć metody if
if not new:
new = '#'
Wiem, że to zły sposób i mam nadzieję, że rozumiesz, co miałem na myśli.
Odpowiedzi:
Jak mogę zakwestionować zmienną, która jest typu NoneType?
Użyj isoperatora, tak jak to
if variable is None:
Dlaczego to działa?
Ponieważ Nonejest to jedyny obiekt typu singleton NoneTypew Pythonie, możemy użyć isoperatora do sprawdzenia, czy zmienna ma Nonew sobie czy nie.
Cytując z isdokumentów ,
Operatorzy
isiis nottesty do identyfikacji obiektu:x is yjest prawdziwe wtedy i tylko wtedyx, ayto ten sam obiekt.x is not ydaje odwrotną wartość prawdy.
Ponieważ może istnieć tylko jedna instancja None, isbyłby to preferowany sposób sprawdzenia None.
Usłysz to z pyska konia
Cytując Wytyczne dotyczące stylu kodowania Pythona - PEP-008 (wspólnie zdefiniowane przez samego Guido),
Porównania do pojedynczych lubię
Nonezawsze powinny być wykonane zislubis not, nigdy operatorów równości .
== Nonei is None?
None, oba przyniosą podobny wynik.
pandasDataFrame istnieje - w tym type(df) is type(None)celu The truth value of a DataFrame is ambiguous
Można to również zrobić isinstancezgodnie z odpowiedzią Alexa Halla :
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance jest również intuicyjny, ale istnieje komplikacja, że wymaga linii
NoneType = type(None)
co nie jest potrzebne dla typów takich jak inti float.
NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Jak zauważył komentarz Aarona Halla:
Ponieważ nie można podklasować,
NoneTypea ponieważNonejest to singleton,isinstancenie należy go używać do wykrywaniaNone- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyćis Nonelubis not None.
Oryginalna odpowiedź:
Najprostszym sposobem jednak bez dodatkowej linii oprócz odpowiedzi na kardamon jest prawdopodobnie:
isinstance(x, type(None))
Jak mogę zakwestionować zmienną, która jest typu NoneType? Muszę użyć metody if
Używanie isinstance()nie wymaga iswewnątrz if-statement:
if isinstance(x, type(None)):
#do stuff
Informacje dodatkowe
Można również sprawdzić, czy w jednym isinstance()wyciągu jest wiele typów, jak wspomniano w dokumentacji . Po prostu napisz typy jako krotkę.
isinstance(x, (type(None), bytes))
NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
python 3.6.7
isinstance nie należy używać? Rozumiem, że isnależy to preferować, ale są przypadki, w których formularz isinstance wydaje się bardziej naturalny (np. Sprawdzanie wielu typów jednocześnie isinstance(x, (str, bool, int, type(None)))). Czy to tylko osobiste preferencje, czy jest jakieś zastrzeżenie, którego nie jestem świadomy?
type2., a następnie wywołanie go 3. następnie wyszukiwanie typu None- kiedy Nonejest singletonem i słowem kluczowym. Kolejny minus: 4. jest to bardzo niestandardowe i podniesie brwi, gdy ludzie patrzą na twój kod. x is Nonejest bardziej zoptymalizowanym czekiem. Sugerowałbym x is None or isinstance(x, (str, bool, int))- ale sugerowałbym również, abyś pomyślał więcej o tym, co robisz, gdy robisz tego rodzaju sprawdzanie typów, które nie mają ze sobą wiele wspólnego ...
Nie jestem pewien, czy to odpowiada na pytanie. Ale wiem, że zrozumienie tego zajęło mi trochę czasu. Przeglądałem stronę internetową i nagle nie było już nazwiska autorów. Potrzebowałem więc wyciągu z czeku.
if type(author) == type(None):
my if body
else:
my else body
Autor może być dowolną zmienną w tym przypadku i Nonemoże być dowolnego typu, którego szukasz.
Nonejest to singleton, typenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Python 2.7:
x = None
isinstance(x, type(None))
lub
isinstance(None, type(None))
==> Prawda
NoneTypea ponieważ Nonejest to singleton, isinstancenie należy go używać do wykrywania None- zamiast tego należy postępować zgodnie z przyjętą odpowiedzią i użyć is Nonelub is not None.
Mam nadzieję, że ten przykład będzie dla ciebie pomocny)
print(type(None) # NoneType
Możesz więc sprawdzić typ nazwy zmiennej
#Example
name = 12 # name = None
if type(name) != type(None):
print(name)
else:
print("Can't find name")