while 1 vs while True

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
Antworten
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Dienstag 6. April 2010, 23:01

Hallo,

ich dachte immer `while True` sei guter Programmierstil, aber es laufen einem ja immer wieder `while 1`s über den Weg und das nicht von Leuten die wenig Ahnung haben. `while True` ist langsamer, aber ist das so gravierend?

Was ist denn eure Empfehlung?
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Dienstag 6. April 2010, 23:04

Im Zweifel in den Zen schauen:
Readability counts.
Also verwende True und False.
sma
User
Beiträge: 3018
Registriert: Montag 19. November 2007, 19:57
Wohnort: Kiel

Dienstag 6. April 2010, 23:05

Ich würde bei `while True` bleiben, denn das ist "intention revealing".

Und ja, "while 1" ist unter Python 2.x ein bisschen schneller, doch who really cares...?

Code: Alles auswählen

>>> def a():
...  while 1: pass
... 
>>> dis.dis(a)
  2           0 SETUP_LOOP               3 (to 6)
        >>    3 JUMP_ABSOLUTE            3
        >>    6 LOAD_CONST               0 (None)
              9 RETURN_VALUE        
>>> def a():
...  while True: pass
... 
>>> dis.dis(a)
  2           0 SETUP_LOOP              12 (to 15)
        >>    3 LOAD_GLOBAL              0 (True)
              6 JUMP_IF_FALSE            4 (to 13)
              9 POP_TOP             
             10 JUMP_ABSOLUTE            3
        >>   13 POP_TOP             
             14 POP_BLOCK           
        >>   15 LOAD_CONST               0 (None)
             18 RETURN_VALUE        
Bei Python 3.1 ist es dann egal:

Code: Alles auswählen

>>> def a():
...  while True: pass
... 
>>> dis.dis(a)
  2           0 SETUP_LOOP               3 (to 6) 
        >>    3 JUMP_ABSOLUTE            3 
        >>    6 LOAD_CONST               0 (None) 
              9 RETURN_VALUE         
Stefan
Mad-Marty
User
Beiträge: 317
Registriert: Mittwoch 18. Januar 2006, 19:46

Donnerstag 8. April 2010, 18:05

Das ist primär legacy code geschuldet würde ich denken, aus der Zeit wo es kein True/False gab sondern 1/0 dafür benutzt wurde.

Ganz klar: Nimm True/False
Benutzeravatar
jbs
User
Beiträge: 953
Registriert: Mittwoch 24. Juni 2009, 13:13
Wohnort: Postdam

Donnerstag 8. April 2010, 18:20

mitzuhiko nutzt auch 1/0 ;)


Also aus nostalgischen Gründen in Ordnung? :D
[url=http://wiki.python-forum.de/PEP%208%20%28%C3%9Cbersetzung%29]PEP 8[/url] - Quak!
[url=http://tutorial.pocoo.org/index.html]Tutorial in Deutsch[/url]
DasIch
User
Beiträge: 2452
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Donnerstag 8. April 2010, 18:54

Aus nostalgischen Gründen ist nie etwas in Ordnung es sei den du machst ein schlechten Scherz über den sowieso keiner lacht. Letztere kann man sich aus offensichtlichen Gründen sparen.
Antworten