Hướng dẫn how do i check if a condition is true in python? - làm cách nào để kiểm tra xem một điều kiện có đúng trong python không?

Làm thế nào để bạn kiểm tra xem một cái gì đó là True trong Python? Có ba cách:

  • Một cách "xấu": if variable == True:
  • Một cách khác "xấu": if variable is True:
  • Và cách tốt, được đề xuất ngay cả trong các khuyến nghị lập trình của PEP8: if variable:

Những cách "xấu" không chỉ được cau mày mà còn chậm hơn. Hãy sử dụng một bài kiểm tra đơn giản:

$ python -m timeit -s "variable=False" "if variable == True: pass"
10000000 loops, best of 5: 24.9 nsec per loop

$ python -m timeit -s "variable=False" "if variable is True: pass"
10000000 loops, best of 5: 17.4 nsec per loop

$ python -m timeit -s "variable=False" "if variable: pass"
20000000 loops, best of 5: 10.9 nsec per loop

Sử dụng

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

0 chậm hơn khoảng 60% so với
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

1 (17,4/10,9≈1.596), nhưng sử dụng
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

2 chậm hơn 120% (24,9/10,9≈2.284)! Không quan trọng nếu
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

3 thực sự là True hoặc
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5 - sự khác biệt về hiệu suất là tương tự nhau (nếu
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

3 là True, cả ba kịch bản sẽ chậm hơn một chút).

Tương tự, chúng ta có thể kiểm tra xem một biến không phải là True bằng cách sử dụng một trong các phương pháp sau:

  • $ python -m timeit -s "variable=False" "if variable != True: pass"
    10000000 loops, best of 5: 26 nsec per loop

    $ python -m timeit -s "variable=False" "if variable is not True: pass"
    10000000 loops, best of 5: 18.8 nsec per loop

    $ python -m timeit -s "variable=False" "if not variable: pass"
    20000000 loops, best of 5: 12.4 nsec per loop

    9 ("xấu")
  • def process_orders(orders=None):
    if not orders:
    # There are no orders, return
    return
    else:
    # Process orders
    ...
    0 ("xấu")
  • def process_orders(orders=None):
    if not orders:
    # There are no orders, return
    return
    else:
    # Process orders
    ...
    1 (tốt)
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
2 thắng.
def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
3 chậm hơn 50% (18,8/12.4≈1.516) và
def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
4 mất gấp đôi thời gian (26/12.4≈2.016).

Các phiên bản

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

1 và
def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
2 nhanh hơn để thực hiện và nhanh hơn để đọc. Chúng là những thành ngữ phổ biến mà bạn thường thấy trong Python (hoặc các ngôn ngữ lập trình khác).

Về loạt bài "Viết Python nhanh hơn"

"Viết Python nhanh hơn" là một loạt các bài viết ngắn thảo luận về cách giải quyết một số vấn đề phổ biến với các cấu trúc mã khác nhau. Tôi chạy một số điểm chuẩn, thảo luận về sự khác biệt giữa mỗi đoạn mã và kết thúc với một số khuyến nghị cá nhân.

Những khuyến nghị đó sẽ làm cho mã của bạn nhanh hơn nhiều? Không thực sự. Có phải biết những khác biệt nhỏ đó sẽ tạo ra một lập trình viên Python tốt hơn một chút? Hy vọng!
Is knowing those small differences going to make a slightly better Python programmer? Hopefully!

Bạn có thể đọc thêm về một số giả định tôi đã thực hiện, thiết lập điểm chuẩn và câu trả lời cho một số câu hỏi phổ biến trong bài viết giới thiệu.

"Sự thật" và "Falsy"

Tại sao tôi tiếp tục đưa "xấu" vào báo giá? Đó là bởi vì cách "xấu" không phải lúc nào cũng xấu (điều đó chỉ sai khi bạn muốn so sánh các giá trị Boolean, như được chỉ trong PEP8). Đôi khi, bạn cố tình phải sử dụng một trong những so sánh khác.

Trong Python (và nhiều ngôn ngữ khác), có True, và có những giá trị sự thật. Nghĩa là, các giá trị được hiểu là True nếu bạn chạy

def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
9. Tương tự, có
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5 và có các giá trị giả (giá trị trả về
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5 từ
def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...
9). Một danh sách trống (
def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
3), chuỗi (
def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
4), từ điển (
def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
5),
def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
6 và 0 đều giả mạo nhưng chúng không hoàn toàn
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5.

Đôi khi bạn cần phân biệt giữa ____ ____ 6/________ 15 và các giá trị sự thật/giả. Nếu mã của bạn sẽ hoạt động theo một cách khi bạn vượt qua một danh sách trống và trong một danh sách khác, khi bạn vượt qua

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5, bạn không thể sử dụng
>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

1.

Hãy xem kịch bản sau:

def process_orders(orders=None):
if not orders:
# There are no orders, return
return
else:
# Process orders
...

Chúng tôi có một chức năng để xử lý một số đơn đặt hàng. Nếu không có đơn đặt hàng, chúng tôi muốn quay lại mà không làm gì cả. Nếu không, chúng tôi muốn xử lý các đơn đặt hàng hiện có.

Chúng tôi giả định rằng nếu không có đơn đặt hàng, thì tham số

>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

2 được đặt thành
def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
6. Nhưng, nếu
>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

2 là một danh sách trống, chúng tôi cũng quay lại mà không có bất kỳ hành động nào! Và có lẽ có thể nhận được một danh sách trống vì ai đó chỉ cập nhật thông tin thanh toán của một đơn đặt hàng trong quá khứ? Hoặc có lẽ có một danh sách trống có nghĩa là có một lỗi trong hệ thống. Chúng ta nên bắt lỗi đó trước khi chúng ta điền vào cơ sở dữ liệu với các đơn đặt hàng trống! Bất kể lý do gì cho một danh sách trống, mã trên sẽ bỏ qua nó. Chúng tôi có thể sửa nó bằng cách điều tra tham số
>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

2 cẩn thận hơn:

def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...

Điều tương tự áp dụng cho các giá trị sự thật. Nếu mã của bạn sẽ hoạt động khác với True so với, giả sử, giá trị

>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

7, chúng tôi không thể sử dụng
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

1. Chúng ta nên sử dụng
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

2 để so sánh số (
a = 1
# This will print 'yes'
if a is 1:
print('yes')

b = 1000
# This won't!
if b is 1000:
print('yes')

0) và
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

0 để so sánh với True (
a = 1
# This will print 'yes'
if a is 1:
print('yes')

b = 1000
# This won't!
if b is 1000:
print('yes')

3). Nghe có vẻ khó hiểu? Chúng ta hãy xem sự khác biệt giữa
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

0 và
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

2.

$ python -m timeit -s "variable=False" "if variable != True: pass"10000000 loops, best of 5: 26 nsec per loop$ python -m timeit -s "variable=False" "if variable is not True: pass"10000000 loops, best of 5: 18.8 nsec per loop$ python -m timeit -s "variable=False" "if not variable: pass"20000000 loops, best of 5: 12.4 nsec per loop0 Kiểm tra danh tính, $ python -m timeit -s "variable=False" "if variable != True: pass"10000000 loops, best of 5: 26 nsec per loop$ python -m timeit -s "variable=False" "if variable is not True: pass"10000000 loops, best of 5: 18.8 nsec per loop$ python -m timeit -s "variable=False" "if not variable: pass"20000000 loops, best of 5: 12.4 nsec per loop2 kiểm tra giá trị

Toán tử

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

0 so sánh danh tính của các đối tượng. Nếu hai biến giống hệt nhau, điều đó có nghĩa là chúng chỉ vào cùng một đối tượng (cùng một vị trí trong bộ nhớ). Cả hai đều có cùng một ID (mà bạn có thể kiểm tra với hàm ID ()).

Toán tử

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

2 so sánh các giá trị. Nó kiểm tra xem giá trị của một biến bằng với giá trị của một số biến khác.

Một số đối tượng trong Python là duy nhất, như

def process_orders(orders=None):
if orders is None:
# orders is None, return
return
elif orders == []:
# Process empty list of orders
...
elif len(orders) > 0:
# Process existing orders
...
6, True hoặc
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

5. Mỗi lần bạn gán một biến cho True, nó chỉ vào cùng một đối tượng True như các biến khác được gán cho True. Nhưng mỗi lần bạn tạo một danh sách mới, Python tạo ra một đối tượng mới:

>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

Điều quan trọng là phải biết sự khác biệt giữa

$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

0 và
$ python -m timeit -s "variable=False" "if variable != True: pass"
10000000 loops, best of 5: 26 nsec per loop

$ python -m timeit -s "variable=False" "if variable is not True: pass"
10000000 loops, best of 5: 18.8 nsec per loop

$ python -m timeit -s "variable=False" "if not variable: pass"
20000000 loops, best of 5: 12.4 nsec per loop

2. Nếu bạn nghĩ rằng chúng hoạt động giống nhau, bạn có thể kết thúc với những lỗi kỳ lạ trong mã của bạn:

a = 1
# This will print 'yes'
if a is 1:
print('yes')

b = 1000
# This won't!
if b is 1000:
print('yes')

Trong ví dụ trên, khối mã đầu tiên sẽ in "Có", nhưng lần thứ hai sẽ không. Đó là bởi vì Python thực hiện một số tối ưu hóa nhỏ và các số nguyên nhỏ có chung ID (chúng chỉ vào cùng một đối tượng). Mỗi lần bạn gán

>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

7 cho một biến mới, nó chỉ vào cùng một đối tượng
>>> a = True
>>> b = True
>>> a is b
True
# Variables that are identical are always also equal!
>>> a == b
True

# But
>>> a = [1,2,3]
>>> b = [1,2,3]
>>> a is b
False # Those lists are two different objects
>>> a == b
True # Both lists are equal (contain the same elements)

7. Nhưng khi bạn gán if variable == True:0 cho một biến, nó sẽ tạo ra một đối tượng mới. Nếu chúng ta sử dụng if variable == True:1, thì mọi thứ sẽ hoạt động như mong đợi.

Kết luận

Tóm lại:

  • Để kiểm tra xem một biến có bằng đúng/false không (và bạn không phải phân biệt giữa ________ 6/________ 15 và các giá trị sự thật/giả mạo), sử dụng
    $ python -m timeit -s "variable=False" "if variable != True: pass"
    10000000 loops, best of 5: 26 nsec per loop

    $ python -m timeit -s "variable=False" "if variable is not True: pass"
    10000000 loops, best of 5: 18.8 nsec per loop

    $ python -m timeit -s "variable=False" "if not variable: pass"
    20000000 loops, best of 5: 12.4 nsec per loop

    1 hoặc
    def process_orders(orders=None):
    if not orders:
    # There are no orders, return
    return
    else:
    # Process orders
    ...
    2. Đó là cách đơn giản và nhanh nhất để làm điều này.
  • Nếu bạn muốn kiểm tra xem một biến có đúng hay sai không (và không phải là sự thật/giả), hãy sử dụng ____10 (
    a = 1
    # This will print 'yes'
    if a is 1:
    print('yes')

    b = 1000
    # This won't!
    if b is 1000:
    print('yes')

    3).is explicitly True or False (and is not truthy/falsy), use
    $ python -m timeit -s "variable=False" "if variable != True: pass"
    10000000 loops, best of 5: 26 nsec per loop

    $ python -m timeit -s "variable=False" "if variable is not True: pass"
    10000000 loops, best of 5: 18.8 nsec per loop

    $ python -m timeit -s "variable=False" "if not variable: pass"
    20000000 loops, best of 5: 12.4 nsec per loop

    0 (
    a = 1
    # This will print 'yes'
    if a is 1:
    print('yes')

    b = 1000
    # This won't!
    if b is 1000:
    print('yes')

    3).
  • Nếu bạn muốn kiểm tra xem một biến có bằng 0 hoặc nếu danh sách trống, hãy sử dụng if variable == True:8 hoặc if variable == True:9.

Làm thế nào để bạn biết nếu một điều kiện là sai trong Python?

Nếu các tuyên bố thường kiểm tra nếu một tình huống cụ thể xảy ra. Nhưng chúng ta cũng có thể kiểm tra ngược lại, và xem nếu có điều gì đó không xảy ra. Chúng tôi làm điều đó với nhà điều hành không phải của Python. Nhà điều hành đó thực hiện phủ định logic: nó trả về đúng khi đặt trước một cái gì đó sai.Python's not operator. That operator performs logical negation: it returns True when put in front of something that's False .

Điều gì có nghĩa là gì trong Python?

Nó được sử dụng để đại diện cho giá trị sự thật của một biểu thức.Ví dụ: biểu thức 1used to represent the truth value of an expression. For example, the expression 1 <= 2 is True , while the expression 0 == 1 is False .

Điều gì đánh giá đúng trong Python?

Đầu tiên, chúng tôi xem xét loại giá trị nào đánh giá thành "đúng" hoặc "sai" trong Python.Bất cứ điều gì "trống" thường đánh giá là sai, cùng với số nguyên 0 và giá trị boolean của sai.Các đối tượng không được đánh giá trống để "đúng", cùng với các số không bằng 0 và giá trị boolean true.Objects that are not empty evaluate to "True", along with numbers not equal to 0, and the boolean value True.

Làm thế nào để bạn kiểm tra các điều kiện boolean trong Python?

Chúng ta có thể đánh giá các giá trị và biến bằng hàm python bool ().Phương pháp này được sử dụng để trả về hoặc chuyển đổi giá trị thành giá trị boolean, tức là đúng hoặc sai, sử dụng quy trình kiểm tra sự thật tiêu chuẩn.using the Python bool() function. This method is used to return or convert a value to a Boolean value i.e., True or False, using the standard truth testing procedure.