ฉันมีวิธีที่บางครั้งส่งกลับค่า 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, จะเป็นวิธีที่แนะนำในการตรวจสอบisNone
ได้ยินจากปากม้า
การอ้างอิงแนวทางการเขียนโค้ดของ Python - PEP-008 (กำหนดโดย Guido เอง)
เปรียบเทียบกับ singletons ชอบ
Noneควรจะทำด้วยisหรือis not, ไม่เคยประกอบความเสมอภาค
== Noneและis Noneคืออะไร?
Noneพวกเขาทั้งสองจะให้ผลลัพธ์ที่คล้ายกัน
pandasDataFrame อยู่หรือไม่ฉันใช้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)
ซึ่งไม่จำเป็นสำหรับประเภทชอบและintfloat
NoneTypeและตั้งแต่Noneเป็นเดี่ยว, isinstanceไม่ควรนำมาใช้ในการตรวจสอบNone- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis None is not None
ตามที่ระบุไว้โดยความคิดเห็นของ Aaron Hall:
เนื่องจากคุณไม่สามารถ subclass
NoneTypeและตั้งแต่Noneเป็นเดี่ยว,isinstanceไม่ควรนำมาใช้ในการตรวจสอบNone- แทนคุณควรทำเป็นคำตอบที่ได้รับการยอมรับกล่าวและการใช้งานหรือis Noneis 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)))) มันเป็นเพียงการตั้งค่าส่วนตัวหรือมีข้อแม้ที่ฉันไม่รู้?
type2. แล้วเรียกมัน 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")