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

私はそれが動作することを理解しますが、なぜ動作しないのですか。 Google、pythonのドキュメント、およびstackoverflowをperusingの数時間後、私は誰も賢明ではありません。このような関数呼び出しでIF文を使用する方法を説明するものは何も見つかりませんでした。私は2.7と3.5の下で実行しているので、特定のバージョンに固有のようには見えません。私は同様のものがforループで行われているのを見てきました。それは、それが標準的なやり方であるかもしれません。私は自分自身のようなものです。それがどのように動作するのか分かりません。このPythonコードはなぜ機能しますか?

システムコール内でIF文がどのように評価されるのか混乱しており、特にIF文の構文について混乱します。私が読んだドキュメンテーションの中でその構文を見たことはありません。

Pythonは全く新しいものです。これが骨抜きであれば私を許してください。しかし、私はそれを取得しません。

+0

は 'os.system'コマンドを想定し、インライン' if'は、一つを生成します。 – Maroun

+0

これは単なるif文です。 'system'は文字列だけを期待し、式はそれがどんな方法であれ、それを渡します。 –

答えて

4

C言語のような言語とその三項演算子に慣れている場合、Pythonのa if b else cb ? a : cに似ています。したがって、上記のコードは言う:

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

結果は、OS固有の操作を実行するos.system()コマンドに渡されます。

ここはsome tutorial information on this subjectです。

+0

うわー...お元気だよ! – ClayD

+0

最初の行コメントを編集できませんでした。すぐに入力してください。 Cの類推が私に役立ちます。 私はコードが何をしているのか知っていましたが、この構文を知らなかったので、彼の文書を見つけるのに十分スマートではありませんでした。答えとリンクの両方に非常に感謝します。 – ClayD

2

if式は、システムコールの内部では実行されません。 の前にシステムコールが実行されます。あなたのコードは

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

と等価であるザ・表現自体はif文

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

のための唯一の短い形式である場合は、この最初のCを評価します。それが真であれば、Aは評価されて となり、そうでなければBが評価され結果が得られます。

このショートカット条件式構文が同様の構文は、例えばJavaのを取って、他の言語でありますPythonの2.5 Check it here

ため添加した: min = (a<b)? a: b Bよりも小さいか否かをチェックする小さい場合、それはAを返しそれ以外の場合はbを返します。ところで、それはの三項演算子をJavaで呼びます。あなたのケースでは

'cls' if os.name=='nt' else 'clear'それはos.nameは、それがあるならば、それはclsを返し、文字列ntに等しいかどうかをチェックするが、それ以外の場合はclear

+0

ありがとうございます。リンクは特に有用でした。 Ken Y-NはCスタイルの演算子を使って(b?a:c)、私は良いアナロジーだと思って説明しました。 – ClayD

3

このインラインif - elseを返すには、三項演算子のpythonバージョンです。

、あなたが関数にパラメータを渡すために同じ構文を使用することができます

a = 10 if b > c else 20 

と同じように書くと、Pythonで

a = b > c ? 10 : 20 

を書くとC/C++/Javaの/ JavaScriptのような言語で

。 PythonでC/C++

foo(b > c ? 10 : 20) 

foo(10 if b > c else 20) 
関連する問題