„truthy” i „falsy” w Pythonie

„truthy” i „falsy” w Pythonie

Ten artykuł wyjaśnia „truthy” i „falsy” w Pythonie.

YouTube Video

„truthy” i „falsy” w Pythonie

Definicja „truthy” i „falsy”

W Pythonie obiekty oceniane w wyrażeniach warunkowych są uznawane za 'True' lub 'False'. „Truthy” odnosi się do obiektów ocenianych jako 'True', a „falsy” do tych ocenianych jako 'False'. Te oceny są często używane w konstrukcjach warunkowych, takich jak wyrażenia if lub pętle while. Funkcja bool() przyjmuje dowolny obiekt i zwraca jego wartość logiczną.

„Falsy” (Obiekty oceniane jako False)

W języku Python następujące obiekty są uznawane za fałszywe (falsy):.

  • False

  • None

  • Zero wartości numeryczne

    • Przykład: 0, 0.0
  • Puste typy sekwencji (takie jak puste listy, krotki lub ciągi znaków)

    • Przykład: [], (), ""
  • Pusty słownik

    • Przykład: {}
  • Pusty zbiór

    • Przykład: set()

Te obiekty są oceniane jako 'fałszywe' (falsy) podczas użycia w warunku instrukcji if. Na przykład możesz napisać kod w ten sposób.

1if not []:
2    print("The list is falsy.")
  • W tym kodzie lista [] jest pusta, dlatego jest oceniana jako fałszywa (falsy), a instrukcja print zostaje wykonana.

„Truthy” (Obiekty oceniane jako True)

Obiekty, które nie są uznawane za fałszywe, są traktowane jako prawdziwe (truthy).

  • Liczby różne od zera (liczby całkowite, liczby zmiennoprzecinkowe)

    • Przykłady: 1, 3.14, -100
  • Niepuste typy sekwencji (listy, krotki, łańcuchy znaków itp.)

    • Przykłady: [1, 2, 3], (1, 2), "Hello"
  • Niepuste słowniki

    • Przykład: {"key": "value"}
  • Niepuste zbiory

    • Przykład: {1, 2, 3}

Obiekty uznawane za prawdziwe (truthy) zostaną ocenione jako 'True', gdy użyte w warunku instrukcji if. Na przykład możesz napisać kod w ten sposób.

1if [1, 2, 3]:
2    print("The list is truthy.")
  • W powyższym kodzie, ponieważ lista [1, 2, 3] nie jest pusta, zostaje oceniona jako prawdziwa (truthy) i instrukcja print zostanie wykonana.

Ocenianie wartości logicznej za pomocą funkcji bool()

Możesz ocenić wartość logiczną obiektów używając funkcji bool().

 1# Examples of falsy values
 2print("False is", "truthy" if bool(False) else "falsy")
 3print("0 is", "truthy" if bool(0) else "falsy")
 4print('"" is', "truthy" if bool("") else "falsy")
 5print("None is", "truthy" if bool(None) else "falsy")
 6print("[] is", "truthy" if bool([]) else "falsy")
 7
 8# Examples of truthy values
 9print("1 is", "truthy" if bool(1) else "falsy")
10print('"hello" is', "truthy" if bool("hello") else "falsy")
11print('" " (space) is', "truthy" if bool(" ") else "falsy")
12print('"0" is', "truthy" if bool("0") else "falsy")
  • Ten kod pokazuje, jak oceniana jest wartość logiczna różnych wartości. Na przykład wartość numeryczna 0 oraz pusty ciąg znaków są traktowane jako False, podczas gdy spacja lub ciąg znaków "0" są traktowane jako True.

Wykorzystywanie prawdziwych (truthy) i fałszywych (falsy)

Dzięki wykorzystaniu prawdziwych (truthy) i fałszywych (falsy) kod można pisać bardziej zwięźle i intuicyjnie. W szczególności instrukcje if mogą być często oceniane bez jawnych porównań, co czyni je krótszymi. Na przykład poniższe dwa fragmenty kodu działają podobnie, ale pierwszy z nich jest bardziej zwięzły.

1my_list = [1]
2
3# Explicit comparison
4if my_list != []:
5    print("The list is not empty.")
6
7# Using truthy/falsy
8if my_list:
9    print("The list is not empty.")

W powyższym przykładzie można zobaczyć, że my_list jest oceniana jako prawdziwa (truthy), o ile nie jest pustą listą, co eliminuje potrzebę jawnego porównania.

Projektowanie z wykorzystaniem prawdziwych (truthy) i fałszywych (falsy)

Skutecznie wykorzystując koncepty prawdziwych (truthy) i fałszywych (falsy), można poprawić czytelność i wydajność kodu. Są one szczególnie przydatne do ustawiania wartości domyślnych, sprawdzania poprawności zmiennych i walidacji danych wejściowych. Na przykład, jeśli oczekujesz przekazania None lub pustej listy jako argumentów, możesz napisać kod w ten sposób.

1def process_data(data=None):
2    data = data or []
3    print(data)
4
5process_data()  # An empty list is used by default.
  • W tym kodzie, jeśli data jest None, pustą listę [] ustawia się jako wartość domyślną. W ten sposób użycie truthy i falsy umożliwia zwięzłe ustalanie wartości domyślnych.

Wskazówki, aby unikać niezamierzonego zachowania

Kod wykorzystujący wartości truthy i falsy może być zwięzły i wygodny, ale pamiętaj, że może prowadzić do niezamierzonego zachowania. Na przykład w tym kodzie nie tylko wtedy, gdy data jest None, ale także gdy przyjmuje dowolną wartość ocenianą jako False, taką jak pusty łańcuch znaków lub 0, zostanie zastąpiona domyślną pustą listą []. Z tego powodu, gdy wymagana jest ściślejsza kontrola, na przykład inicjalizacja wyłącznie wtedy, gdy wartość jest None, zaleca się użycie jawnego warunku takiego jak value is None:. W zależności od sytuacji ważne jest, aby projektować kod z uwzględnieniem równowagi między zwięzłością a ścisłością.

1def process_data(data=None):
2    if data is None:
3        data = []
4    print(data)
5
6process_data()   # An empty list is used by default.
7process_data(0)  # 0 is printed because it's not None.
  • W tym kodzie data jest inicjowana jako pusta lista tylko wtedy, gdy ma wartość None, natomiast inne fałszywe wartości, takie jak 0, pozostają bez zmian.

Kontrolowanie wartości logicznej w obiektach użytkownika

Nawet we własnych klasach możesz kontrolować wartość logiczną obiektu, definiując metodę __bool__() lub __len__().

 1class MyContainer:
 2    def __init__(self, items):
 3        self.items = items
 4
 5    def __len__(self):
 6        return len(self.items)
 7
 8box = MyContainer([])
 9print(bool(box))  # False
10
11box.items.append("item")
12print(bool(box))  # True
  • W tym kodzie metoda __len__() sprawia, że pojemnik jest oceniany jako False, gdy jest pusty oraz jako True, gdy zawiera elementy.

Wnioski

Koncepcje truthy i falsy w Pythonie są bardzo ważne, ponieważ pozwalają pisać zwięzłe wyrażenia warunkowe i sprawiają, że kod jest bardziej intuicyjny. Zrozumienie i poprawne wykorzystanie tych koncepcji może znacznie poprawić czytelność i efektywność kodu.

Możesz śledzić ten artykuł, korzystając z Visual Studio Code na naszym kanale YouTube. Proszę również sprawdzić nasz kanał YouTube.

YouTube Video