2012-11-29 11 views
5

znalazłem ten rodzaj ekspresji kilkakrotnie w programie Pythona:Czy to wyrażenie w języku Python ma sens?

if variable is not None: 
    dothings(variable) 

wydaje się dziwne dla mnie, i myślę, że nie ma więcej sensu niż:

if variable: 
    dothings(variable) 

Może don” t znasz Pythona na tyle, a wyrażenie jest wyjaśnione gdzieś?

Odpowiedz

14

variable może być 0 lub False lub [] lub (); być "falsy" innymi słowy, a następnie instrukcja if zostanie pominięta.

Aby uzyskać więcej informacji na temat tego, co jest uważane za fałszywe w kontekście logicznym, patrz: Truth testing.

W skrócie, testowanie jeśli variable is not None pozwala variable być cokolwiek innego, w tym wartości, które w przeciwnym razie byłyby uważane za fałsz w kontekście logicznym.

+0

A więc ... "A" nie jest " B "różni się tym, że" A to "nie B", a Python stosuje ten pierwszy. Czyż nie? – Zhen

+0

'nie jest' jest odwrotnością' jest', tak. Zobacz http://docs.python.org/2/reference/expressions.html#not-in. Możesz też powiedzieć "nie A jest B". –

5

Niektóre wartości to falsy, ale nie są to None. Możesz nadal chcieć dothings() dla tych wartości.

Here are the things that are falsy in Python 2. (Możesz zmienić „2” w adresie URL do „3” w celu uzyskania wartości dla Pythona 3, ale nie zmieniły się znacząco.)

1

E.g.

i = 0 

if i is not None: 
    print i # prints i 

if i: 
    print i # prints nothing 
0

W implementacji Pythona google głos natknąłem się na ten, jak również ich stosowanie było podczas wywołania funkcji. Parametry są ustawione domyślnie na "Brak", a gdy funkcja jest wywoływana, mogą sprawdzić, czy wartości zostały zmienione, czy domyślne. I.E.

def login (user=None, password=None) 
    if user is None: 
    user = input('Please enter your username'); 
    ... 
    return <something>; 

nazywany przez

login() 

LUB

login(user='cool_dude') 

LUB

dowolnej kombinacji użytkownika/hasło chcesz.

Dodatkowo "aktualizacja" logiki oznacza, że ​​zmienna == true lub false. To nie jest poprawne we wszystkich przypadkach (w niektórych przypadkach może działać, ale je wyrzucam, ponieważ nie jest to przypadek ogólny). To, co testujesz za pomocą logiki "BRAK", dotyczy tego, czy zmienna zawiera coś innego niż BRAK. Podobnie do tego, co mówiłem powyżej, cała "funkcja logowania" polegała na określeniu, czy użytkownik przekazał cokolwiek, nie, czy wartość była prawidłowa, prawdziwa itd.

Powiązane problemy