2017-06-10 13 views
0

私はこのコードがどのように動作するかundestandしません:「間違っている」とはどういう意味ですか?

i = 1 
while False: 
    if i % 5 == 0: 
     break 
    i = i + 2 
print(i) 

while Falseを何?何が偽でなければならないのですか?私はそれを取得しません...

+3

'while False' =>決して実行されないループ。 –

+0

@capybaraこのコードを実行することでできた可能性があります。なぜあなたはこれをstackoverflowで尋ねましたか? –

答えて

6

while loopは、各反復の前にwhileの後ろの条件(よく、式)をチェックし、条件がFalseのときにループ本体の実行を停止します。

したがってwhile Falseは、ループ本体が決して実行されないことを意味します。ループ内のすべてが「デッドコード」です。次

def func(): 
    i = 1 
    while False: 
     if i % 5 == 0: 
      break 
     i = i + 2 
    print(i) 

import dis 

dis.dis(func) 

与える:Pythonの-3.xのは、これまでのところ、それはwhileは、そのため離れ-loop「最適化」ということになります

Line  Bytecode 

    2   0 LOAD_CONST    1 (1) 
       3 STORE_FAST    0 (i) 

    7   6 LOAD_GLOBAL    0 (print) 
       9 LOAD_FAST    0 (i) 
      12 CALL_FUNCTION   1 (1 positional, 0 keyword pair) 
      15 POP_TOP 
      16 LOAD_CONST    0 (None) 
      19 RETURN_VALUE 

がコンパイルされた関数を意味してもいないだろうwhileループが実行される可能性がないため、whileループがあることを知っています(3-6行目の説明はありません)。

+0

pyをastに変換するにはどうすればよいですか? –

+1

@SzabolcsDombi抽象構文ツリーではなく、逆アセンブルされたバイトコードです。詳細については、[disモジュールのドキュメント](https://docs.python.org/3/library/dis.html)を参照してください。しかし、一般的には、前述の 'import dis'に続いて' dis.dis(the_function) 'を使って「バイトコードを取得する」ことができます。 – MSeifert

-1
while True: 

は、永久にループすることを意味します。

while False: 

は実行されません。

+0

私はこの答えがなぜ下降したのか分かりません。それは他の人ほど詳細ではありませんが、それは間違っているわけではありません、回答者が質問を読むことを気にしなかったことを示唆していません、否定的なスコアを値するものではありません。 – user234461

0

これは何かが真実ではないと言っています。その間に、

while (0 == 1) == False: # this statement is true because 0 does not equal 1 
    print('hi') # this will create a infinite loop of hi. 

となる。

while (0 == 0) == False: # this statement is false since 0 does equal 0. 
    print('hi') # this will do nothing since the past statement is false. 
関連する問題