2016-12-19 9 views
2
# this code I don't understand 
def cls():      #if statement freaks me out 
    os.system('cls' if os.name=='nt' else 'clear') 

Ich verstehe, dass es funktioniert, aber nicht, warum es funktioniert. Nachdem ich mehrere Stunden lang Google, Python-Dokumente und stackoverflow durchgelesen habe, bin ich nicht klüger. Ich konnte nichts finden, das diese Art der Verwendung einer IF-Anweisung in einem Funktionsaufruf wie diesem erklärt. Ich habe es unter 2.7 und 3.5 ausgeführt, so scheint es nicht spezifisch für eine bestimmte Version zu sein. Ich habe ähnliche Sachen gesehen, die mit for loops gemacht wurden, dass es eine Standardmethode ist, Dinge zu tun. Ich mag es irgendwie selbst. Versteh einfach nicht wie es funktioniert.Warum funktioniert dieser Python-Code?

Ich bin verwirrt darüber, wie die IF-Anweisung innerhalb Systemaufruf ausgewertet wird, und ich bin besonders verwirrt über die Syntax der IF-Anweisung. Ich habe diese Syntax in keiner der Dokumente, die ich gelesen habe, gesehen.

Python ist komplett neu für mich. Also vergib mir, wenn das einfach nur Dummkopf ist. Aber ich verstehe es nicht.

+0

'os.system' erwartet einen Befehl, der inline' if' erzeugt ein. – Maroun

+0

Es ist nur eine if-Anweisung. 'system' erwartet nur eine Zeichenkette und der Ausdruck liefert es, je nachdem, wie es geht. –

Antwort

4

Wenn Sie mit C-ähnlichen Sprachen und ihrem ternären Operator besser vertraut sind, ist Pythons a if b else c ähnlich wie b ? a : c. Daher sagt der Code oben:

if we are on NT/Windows 
    then use `cls` 
else (for Linux, etc) use `clear` 

Das Ergebnis wird dann an den os.system() Befehl, um die OS-spezifische Operation auszuführen.

Hier ist some tutorial information on this subject.

+0

Wow ... ihr seid schnell! – ClayD

+0

Ich durfte meinen Kommentar für die erste Zeile nicht bearbeiten. Hit zu früh eingeben. Die c Analogie funktioniert für mich. Ich wusste, was der Code machte, wusste aber diese Syntax nicht und war nicht schlau genug, um ihn zu finden. Vielen Dank für die Antwort und den Link. – ClayD

2

Der Ausdruck if wird nicht innerhalb des Systemaufrufs ausgeführt. Es wird vor der Systemaufruf ausgeführt. Der Code entspricht

command = 'cls' if os.name=='nt' else 'clear' 
os.system(command) 

Die if Ausdruck selbst ist nur eine Kurzform für die if-Anweisung

if os.name=='nt': 
    command = 'cls' 
else: 
    command = 'clear' 
os.system(command) 
4
A if C else B 

Dieser erste wertet C; Wenn dies der Fall ist, wird A ausgewertet, um das Ergebnis zu erhalten, andernfalls wird B ausgewertet, um das Ergebnis zu erhalten.

Diese Verknüpfung bedingte Ausdruck Syntax wurde 2,5 Check it here

seit Python hinzugefügt

in anderen Sprachen gibt es ähnliche Syntax, Java zum Beispiel unter: min = (a<b)? a: b, der überprüft, ob ein kleinen als b ist, gibt sie ein, wenn ein kleines sonst kehrt b zurück. BTW, es ist Anruf Ternäroperator in Java.

In Ihrem Fall:

'cls' if os.name=='nt' else 'clear' er prüft, ob os.name bespannen gleich nt, wenn es heißt, es gibt cls, sonst gibt es clear

+0

Danke. Der Link war besonders hilfreich. Ken Y-N benutzte den C-Stil-Operator, um (b? A: c) zu erklären, was ich auch für eine gute Analogie hielt. – ClayD

3

diese Inline-if - else ist die python Version von ternären Operator.

in Sprachen wie C/C++/Java/JavaScript würden Sie

a = b > c ? 10 : 20 

in Python schreiben Sie das gleiche wie

a = 10 if b > c else 20 

schreiben würden Sie das gleiche Konstrukt verwenden können Parameter an Funktionen übergeben .

in C/C++

foo(b > c ? 10 : 20) 

in Python

foo(10 if b > c else 20) 
Verwandte Themen