Python Qualität im Android Source

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
darktrym
User
Beiträge: 784
Registriert: Freitag 24. April 2009, 09:26

Diese Frage stell ich mir grad weil einige Teile ganz schon merkwürdig aussehen. Ich bin sicher nicht der Python Experte aber sowas[1] kann wohl kaum performant noch der Lesbarkeit dienlich sein.

[1]

Code: Alles auswählen

if check_prune:
        i = 0
        while i < len(dirs):
          if dirs[i] in prune:
            del dirs[i]
          else:
            i += 1
statt einfaches:

Code: Alles auswählen

if check_prune:
        dirs = filter(lambda dir: dir not in prune, dirs)
Oder sowas hier wird generell bevorzugt, :

Code: Alles auswählen

f = open(filename, 'w+')
properties.write(f)
f.close()
Aber der Klassiker schlechthin:

Code: Alles auswählen

if key in ("PRODUCT_MODEL"):
    return (key,val)

Dafür das bei Google soviele Ing. sitzen, scheint sich keiner mehr mit den Tools auseinander zu setzen. Gut nicht alle Teile wurden in letzter Zeit mal angefasst aber sowas muss doch auffallen[2], dass das weder hübsch ausschaut, mal abgesehen davon dass hier jemand mit Stringformatierung auf dem Kriegsfuß steht.

[2]

Code: Alles auswählen

sys.stderr.write("(" + str(len(buildprops[key])) + ") \n")
„gcc finds bugs in Linux, NetBSD finds bugs in gcc.“[Michael Dexter, Systems 2008]
Bitbucket, Github
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

Da wird sich ein Programmierer kurz Python angeschaut haben und hat dann angefangen den Code zu schreiben ohne sich damit zu beschäftigen ob der Code idiomatisch ist oder nicht.

Abgesehen davon würde ich allerdings davon ausgehen dass bei deinem ersten Beispiel die Android Variante möglicherweise performanter ist als eine neue Liste mit filter() zu erstellen, hängt aber stark davon ab wann die größe der Liste tatsächlich verändert wird.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

@Performance: Kommt drauf an was man damit meint. Was den Speicherverbrauch angeht, verliert die Filtervariante auf jeden Fall, aber da Python-Listen dynamische Arrays sind, muessen bei einer Loeschung alle nachfolgenden Ellemente nachruecken. Damit handelt man sich schonmal eine groessere Komplexitaetsklasse ein und als Bonus macht man sich den Cache kaputt.

Mit einer Generatorloesung duerfte man einen guten Kompromiss ziehen. Wahrscheinlich ist die Performance fuer den Einsatzzweck aber ziemlich egal.

@darktrym, Naja sowas faellt halt dabei heraus, wenn man sich ein Skript fuer ein einfaches Problem schreibt und das dann so nuetzlich war, dass es laenger lebt als gedacht. Und man generell eher in anderen Sprachen unterwegs ist :)
BlackJack

@DasIch: Falls das wirklich absicht war, dann gehört da aber ein entsprechender Kommentar dran. Sonst schreibt das doch der nächste Programmierer 100% als LC um. Ein Benchmark der das untermauert wäre auch nicht schlecht.
Antworten