ฉันจะใช้บูลีนใน Python ได้อย่างไร


109

Python มีค่าบูลีนจริงหรือไม่? ฉันรู้ว่าคุณสามารถทำได้:

checker = 1
if checker:
    #dostuff

แต่ฉันค่อนข้างอวดดีและสนุกกับการเห็นบูลีนใน Java ตัวอย่างเช่น:

Boolean checker;
if (someDecision)
{
    checker = true;
}
if(checker)
{
    //some stuff
}

มีสิ่งเช่นบูลีนใน Python หรือไม่? ฉันไม่พบสิ่งที่เหมือนในเอกสารนี้


1
จำไว้ว่า ... คุณไม่จำเป็นต้องประกาศประเภทเมื่อสร้างตัวแปร แค่ 'checker = False' ก็เพียงพอแล้ว
Dominic Bou-Samra

10
@Dominic Bou-Samra: "คุณไม่จำเป็นต้องประกาศประเภท"? นั่นไม่เป็นความจริงเลย ฉันคิดว่าคุณควรพูดว่า "คุณไม่สามารถประกาศประเภทสำหรับตัวแปรได้"
ล็อตต์

2
@ S.Lott "คุณไม่สามารถประกาศประเภทของตัวแปรได้" ... ยังไม่เป็นความจริงเพราะคุณสามารถพิมพ์ได้some_var = int("1234")... บรรทัดนั้นตั้งค่าอย่างชัดเจนsome_var=>int
Kolob Canyon

คำตอบ:


142
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[แก้ไข]

สำหรับข้อมูลเพิ่มเติม: http://docs.python.org/library/functions.html#bool

รหัสของคุณก็ใช้ได้เช่นกันเนื่องจาก1จะถูกแปลงเป็นTrueเมื่อจำเป็น จริงๆแล้ว Python ไม่ได้มีประเภทบูลีนมาเป็นเวลานานแล้ว (เช่นเดียวกับ C รุ่นเก่า) และโปรแกรมเมอร์บางคนยังคงใช้จำนวนเต็มแทนบูลีน


17
โดยปกติจะใช้ตัวตรวจสอบ = (some_decision) ได้ง่ายกว่า (เช่น checker = (a <b)) แทน 'if'
MAK

11
ตัวอย่างข้อมูลนี้ทำให้เข้าใจผิดเล็กน้อย ... คุณยังต้องกำหนด "ตัวตรวจสอบ" ก่อนที่จะทดสอบ ในขณะที่ OP กำหนดไว้ก่อนหน้านี้ในตัวตรวจสอบตัวอย่างของคุณ = ไม่มีสิ่งที่จำเป็นอย่างยิ่งหรือคุณจะได้รับ UnboundLocalError
dprogramz

Python booleans เป็นจำนวนเต็ม TrueและFalseเป็นการอ้างอิงถึงอintอบเจ็กต์ที่ขยายด้วยการเขียนทับ__str__และ__repr__.
Mad Physicist

ไพ ธ อนบูลีนไม่ใช่จำนวนเต็ม 1 is not Trueแต่1 == True.
BallpointBen

@BallpointBen: พวกเขาเป็นจำนวนเต็มในสามัญสำนึกของการเป็นกรณีของประเภทที่แสดงโดยint isinstance(True, int)
Bastien Léonard

93

บิวด์อินบูลีนเป็นตัวพิมพ์ใหญ่: TrueและFalse.

ยังทราบว่าคุณสามารถทำได้checker = bool(some_decision)เป็นบิตของชวเลข - boolจะเคยกลับมาหรือTrueFalse

เป็นเรื่องดีที่จะทราบสำหรับการอ้างอิงในอนาคตว่าคลาสที่กำหนด__nonzero__หรือ__len__จะเป็นTrueหรือFalseขึ้นอยู่กับผลลัพธ์ของฟังก์ชันเหล่านั้น แต่ผลลัพธ์ของบูลีนของอ็อบเจ็กต์อื่น ๆ แทบทั้งหมดจะเป็นTrue(ยกเว้นNoneอ็อบเจ็กต์ลำดับว่างและเลขศูนย์)


1
ขอบคุณมากสำหรับข้อมูลเชิงลึก เนื่องจากคะแนนนิยมพุ่งไปสู่คำตอบอื่นฉันจึงให้รางวัล 'คำตอบที่ยอมรับ' ของบาสเตียน อย่างไรก็ตามของคุณมีประโยชน์มากที่สุด! :)
Federer

23
ความองอาจ: อะไรคือจุดที่ไม่ยอมรับคำตอบที่คุณคิดว่ามีประโยชน์ที่สุด ไม่เกี่ยวข้องโดยสิ้นเชิงหากคำตอบอื่นได้รับการโหวตเพิ่มเติม
tzot

2
และคะแนนนิยมก็เช่นกันกับคำตอบนี้ พิจารณาเปลี่ยนการลงคะแนนของคุณ
Alastor Moody

12

True ... และ Falseเห็นได้ชัดว่า

มิฉะนั้นNoneจะประเมินเป็น False เช่นเดียวกับจำนวนเต็ม0และจำนวนทศนิยม0.0(แม้ว่าฉันจะไม่ใช้การลอยแบบนั้นก็ตาม) นอกจากนี้รายการ[]ว่าง tuplet ()ว่างและสตริงว่าง''หรือ""ประเมินเป็น False

ลองด้วยตัวเองด้วยฟังก์ชั่นbool():

bool([])
bool(['a value'])
bool('')
bool('A string')
bool(True)  # ;-)
bool(False)
bool(0)
bool(None)
bool(0.0)
bool(1)

ฯลฯ ..


5

ประเภทบูลีนถูกกำหนดไว้ในเอกสารประกอบ:
http://docs.python.org/library/stdtypes.html#boolean-values

ยกมาจาก doc:

ค่าบูลีนคือวัตถุคงที่สองค่า False และ True ใช้เพื่อแสดงค่าความจริง (แม้ว่าค่าอื่น ๆ อาจถือได้ว่าเป็นเท็จหรือเป็นจริง) ในบริบทที่เป็นตัวเลข (ตัวอย่างเช่นเมื่อใช้เป็นอาร์กิวเมนต์ของตัวดำเนินการทางคณิตศาสตร์) พวกเขาจะทำงานเหมือนจำนวนเต็ม 0 และ 1 ตามลำดับ ฟังก์ชันบูล () ในตัวสามารถใช้เพื่อโยนค่าใด ๆ ไปยังบูลีนได้หากค่าสามารถตีความเป็นค่าความจริงได้ (ดูหัวข้อการทดสอบค่าความจริงด้านบน)

โดยจะเขียนเป็น False และ True ตามลำดับ

ดังนั้นในรหัส java ลบวงเล็บปีกกาเปลี่ยนtrueเป็นTrueและคุณจะโอเค :)


4

ใช่มีboolประเภทข้อมูล (ซึ่งสืบทอดมาจากintและมีเพียงสองค่า: TrueและFalse )

แต่ Python ยังมีboolean-ableแนวคิดสำหรับทุกออบเจ็กต์ซึ่งใช้เมื่อฟังก์ชันbool([x])เรียก

ดูเพิ่มเติม: วัตถุ ภัณฑ์และบูลที่มีมูลค่าของวัตถุในหลาม


x = bool (0) # false && x = bool (1) # true
Julian

0

ไม่เหมือน Java ที่คุณจะประกาศ boolean flag = Trueใน Python คุณสามารถประกาศได้myFlag = True

Python จะตีความสิ่งนี้เป็นตัวแปรบูลีน

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.