ฉันมีวิธีที่บางครั้งส่งกลับค่า NoneType ดังนั้นฉันจะถามตัวแปรที่เป็น NoneType ได้อย่างไร ฉันจำเป็นต้องใช้ถ้าวิธีเช่น
if not new:
new = '#'
ฉันรู้ว่านั่นเป็นวิธีที่ผิดและฉันหวังว่าคุณจะเข้าใจในสิ่งที่ฉันหมายถึง
ฉันมีวิธีที่บางครั้งส่งกลับค่า NoneType ดังนั้นฉันจะถามตัวแปรที่เป็น NoneType ได้อย่างไร ฉันจำเป็นต้องใช้ถ้าวิธีเช่น
if not new:
new = '#'
ฉันรู้ว่านั่นเป็นวิธีที่ผิดและฉันหวังว่าคุณจะเข้าใจในสิ่งที่ฉันหมายถึง
คำตอบ:
ดังนั้นฉันจะถามตัวแปรที่เป็น NoneType ได้อย่างไร
ใช้is
ตัวดำเนินการเช่นนี้
if variable is None:
ทำไมจึงใช้งานได้
เนื่องจากNone
เป็นวัตถุซิงเกิลตันเดียวNoneType
ใน Python เราสามารถใช้is
โอเปอเรเตอร์เพื่อตรวจสอบว่าตัวแปรมีNone
อยู่หรือไม่
ข้อความจากis
เอกสาร ,
โอเปอเรเตอร์
is
และis not
ทดสอบการระบุตัวตนของวัตถุ:x is y
เป็นจริงหากและถ้าx
และy
เป็นวัตถุเดียวกันเท่านั้นx is not y
ให้ค่าความจริงผกผัน
เนื่องจากอาจจะมีเพียงหนึ่งตัวอย่างของNone
, จะเป็นวิธีที่แนะนำในการตรวจสอบis
None
ได้ยินจากปากม้า
การอ้างอิงแนวทางการเขียนโค้ดของ Python - PEP-008 (กำหนดโดย Guido เอง)
เปรียบเทียบกับ singletons ชอบ
None
ควรจะทำด้วยis
หรือis not
, ไม่เคยประกอบความเสมอภาค
== None
และis None
คืออะไร?
None
พวกเขาทั้งสองจะให้ผลลัพธ์ที่คล้ายกัน
pandas
DataFrame อยู่หรือไม่ฉันใช้type(df) is type(None)
เพื่อหลีกเลี่ยง:The truth value of a DataFrame is ambiguous
if variable is None:
...
if variable is not None:
...
นอกจากนี้ยังสามารถทำได้ด้วยisinstance
ตามคำตอบอเล็กซ์ฮอลล์ :
>>> NoneType = type(None)
>>> x = None
>>> type(x) == NoneType
True
>>> isinstance(x, NoneType)
True
isinstance
ยังใช้งานง่าย แต่มีความซับซ้อนที่ต้องใช้สาย
NoneType = type(None)
ซึ่งไม่จำเป็นสำหรับประเภทชอบและint
float
NoneType
และตั้งแต่None
เป็นเดี่ยว, isinstance
ไม่ควรนำมาใช้ในการตรวจสอบNone
- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None
is not None
ตามที่ระบุไว้โดยความคิดเห็นของ Aaron Hall:
เนื่องจากคุณไม่สามารถ subclass
NoneType
และตั้งแต่None
เป็นเดี่ยว,isinstance
ไม่ควรนำมาใช้ในการตรวจสอบNone
- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None
is not None
คำตอบเดิม:
วิธีที่ง่ายที่สุดอย่างไรก็ตามหากไม่มีบรรทัดเพิ่มเติมนอกเหนือจากคำตอบของกระวานก็อาจจะ:
isinstance(x, type(None))
ดังนั้นฉันจะถามตัวแปรที่เป็น NoneType ได้อย่างไร ฉันต้องการใช้ถ้าวิธี
การใช้isinstance()
ไม่จำเป็นต้องมีis
ภายใน - สถานะif
:
if isinstance(x, type(None)):
#do stuff
ข้อมูลเพิ่มเติม
นอกจากนี้คุณยังสามารถตรวจสอบหลายประเภทในหนึ่งisinstance()
คำสั่งตามที่กล่าวไว้ในเอกสาร เพียงเขียนประเภทเป็น tuple
isinstance(x, (type(None), bytes))
NoneType
และตั้งแต่None
เป็นเดี่ยว, isinstance
ไม่ควรนำมาใช้ในการตรวจสอบNone
- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None
is not None
python 3.6.7
isinstance
ไม่ควรใช้? ฉันเข้าใจว่าis
ควรเป็นที่ต้องการ แต่มีบางกรณีที่รูปแบบ isinstance รู้สึกเป็นธรรมชาติมากขึ้น (เช่นการตรวจสอบหลายประเภทพร้อมกันisinstance(x, (str, bool, int, type(None)))
) มันเป็นเพียงการตั้งค่าส่วนตัวหรือมีข้อแม้ที่ฉันไม่รู้?
type
2. แล้วเรียกมัน 3. จากนั้นค้นหาประเภทของNone
- เมื่อNone
เป็นทั้งซิงเกิลและคำหลัก ข้อเสียอีกประการหนึ่ง: 4. สิ่งนี้ไม่ได้มาตรฐานมากและจะยกคิ้วเมื่อมีคนดูรหัสของคุณ x is None
เป็นการตรวจสอบที่เหมาะสมที่สุด ฉันอยากจะแนะนำx is None or isinstance(x, (str, bool, int))
- แต่ฉันขอแนะนำให้คุณคิดถึงสิ่งที่คุณกำลังทำมากขึ้นเมื่อคุณกำลังตรวจสอบประเภทนั้นสำหรับประเภทที่ไม่มีอะไรเหมือนกัน ...
ไม่แน่ใจว่าสิ่งนี้ตอบคำถามหรือไม่ แต่ฉันรู้ว่านี่ใช้เวลาสักครู่กว่าจะคิดออก ฉันวนลูปผ่านเว็บไซต์และทันใดนั้นชื่อของผู้แต่งก็ไม่ได้อยู่ที่นั่นอีกต่อไป จำเป็นต้องมีคำสั่งตรวจสอบ
if type(author) == type(None):
my if body
else:
my else body
ผู้เขียนสามารถเป็นตัวแปรใด ๆ ในกรณีนี้และNone
สามารถเป็นประเภทใดก็ได้ที่คุณกำลังตรวจสอบ
None
เป็นเดี่ยว, type
ไม่ควรนำมาใช้ในการตรวจสอบNone
- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None
is not None
Python 2.7:
x = None
isinstance(x, type(None))
หรือ
isinstance(None, type(None))
==> จริง
NoneType
และตั้งแต่None
เป็นเดี่ยว, isinstance
ไม่ควรนำมาใช้ในการตรวจสอบNone
- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None
is not None
ฉันหวังว่าตัวอย่างนี้จะเป็นประโยชน์สำหรับคุณ)
print(type(None) # NoneType
ดังนั้นคุณสามารถตรวจสอบประเภทของชื่อตัวแปรได้
#Example
name = 12 # name = None
if type(name) != type(None):
print(name)
else:
print("Can't find name")