Làm cách nào để sử dụng Boolean trong Python?


109

Python có thực sự chứa giá trị Boolean không? Tôi biết rằng bạn có thể làm:

checker = 1
if checker:
    #dostuff

Nhưng tôi khá giả và thích nhìn thấy các boolean trong Java. Ví dụ:

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

Có một thứ như một Boolean trong Python không? Tôi dường như không thể tìm thấy bất cứ điều gì giống như nó trong tài liệu.


1
Hãy nhớ ... bạn không cần khai báo kiểu khi tạo một biến. Chỉ cần 'checker = False' là đủ.
Dominic Bou-Samra

10
@Dominic Bou-Samra: "bạn không cần khai báo các loại"? Điều đó không hoàn toàn đúng. Tôi nghĩ bạn nên nói "bạn không thể khai báo kiểu cho một biến."
S.Lott

2
@ S.Lott "bạn không thể khai báo kiểu cho một biến" ... vẫn không đúng vì bạn có thể đánh máy some_var = int("1234")... dòng đó đặt rõ ràng some_var=>int
Kolob Canyon

Câu trả lời:


142
checker = None 

if some_decision:
    checker = True

if checker:
    # some stuff

[Biên tập]

Để biết thêm thông tin: http://docs.python.org/library/functions.html#bool

Mã của bạn cũng hoạt động, vì 1được chuyển đổi thành Truekhi cần thiết. Thực ra Python đã không có kiểu boolean trong một thời gian dài (như trong C cũ), và một số lập trình viên vẫn sử dụng số nguyên thay vì boolean.


17
Thường đơn giản hơn là sử dụng checker = (some_decision) (ví dụ: checker = (a <b)), thay vì 'if'.
MAK

11
đoạn mã này hơi gây hiểu lầm ... bạn vẫn cần xác định "người kiểm tra" trước khi kiểm tra nó. Trong khi định nghĩa OP nó trước đó, trong kiểm tra dụ của bạn = None là hoàn toàn cần thiết hoặc bạn sẽ nhận được một UnboundLocalError
dprogramz

Các boolean trong Python là các số nguyên. TrueFalselà các tham chiếu đến intcác đối tượng mở rộng có ghi đè __str____repr__.
Mad Physicist

Các boolean trong Python không phải là số nguyên; 1 is not True, nhưng 1 == True.
BallpointBen

@BallpointBen: chúng là các số nguyên theo cách hiểu thông thường là các thể hiện của intkiểu, như được hiển thị bên dưới isinstance(True, int).
Bastien Léonard

93

Nội trang boolean được viết hoa: TrueFalse.

Cũng lưu ý rằng bạn có thể làm checker = bool(some_decision)như một chút tốc ký - boolsẽ chỉ trở lại Truehoặc False.

Thật tốt khi biết để tham khảo trong tương lai rằng các lớp xác định __nonzero__hoặc__len__ sẽ Truehoặc Falsetùy thuộc vào kết quả của các hàm đó, nhưng hầu như mọi kết quả boolean của đối tượng khác sẽ là True(ngoại trừ Noneđối tượng, chuỗi trống và số không).


1
Cảm ơn bạn rất nhiều cho cái nhìn sâu sắc. Khi số phiếu phổ thông chuyển sang câu trả lời khác, tôi đã trao cho Bastien 'Câu trả lời được chấp nhận'. Tuy nhiên của bạn là hữu ích nhất! :)
Federer

23
dũng cảm: điểm không chấp nhận câu trả lời bạn thấy hữu ích nhất là gì? Nó hoàn toàn không liên quan nếu một câu trả lời khác được ủng hộ nhiều hơn.
tzot

2
Và phiếu phổ thông cũng với câu trả lời này. Cân nhắc việc thay đổi phiếu bầu của bạn.
Alastor Moody

12

True... và Falserõ ràng.

Nếu không, Noneđánh giá là False, cũng như số nguyên 0và cả float 0.0(mặc dù tôi sẽ không sử dụng float như vậy). Ngoài ra, danh sách trống [], bộ giá trị trống ()và chuỗi trống ''hoặc ""đánh giá thành Sai.

Hãy tự mình thử với chức năng bool():

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

Vân vân..


5

Các kiểu boolean được định nghĩa trong tài liệu:
http://docs.python.org/library/stdtypes.html#boolean-values

Trích dẫn từ tài liệu:

Giá trị Boolean là hai đối tượng không đổi False và True. Chúng được sử dụng để biểu thị các giá trị chân lý (mặc dù các giá trị khác cũng có thể được coi là sai hoặc đúng). Trong ngữ cảnh số (ví dụ khi được sử dụng làm đối số cho toán tử số học), chúng hoạt động giống như các số nguyên 0 và 1, tương ứng. Hàm tích hợp bool () có thể được sử dụng để chuyển bất kỳ giá trị nào đến Boolean, nếu giá trị có thể được hiểu là giá trị chân lý (xem phần Kiểm tra giá trị chân lý ở trên).

Chúng được viết lần lượt là Sai và Đúng.

Vì vậy, trong mã java loại bỏ dấu ngoặc nhọn, thay đổi truethành Truevà bạn sẽ ổn :)



0

Không giống như Java mà bạn sẽ khai báo boolean flag = True, trong Python, bạn chỉ có thể khai báomyFlag = True

Python sẽ giải thích điều này như một biến boolean

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.