Python Kenntnisse erweitern

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.
min
User
Beiträge: 37
Registriert: Dienstag 22. Dezember 2009, 22:25

Hallo
Ich wurde des öfteren schon darauf angesprochen, das meine Art der Programmierung, Funktionen oder die Benutzung von Variablen, etwas, ähm primitiv ist. Ich würde das gerne ändern. Leider habe ich im Internet nichts gefunden, was mir dabei helfen könnte bessere Scripte zu schreiben. Hätte da jemand einen Link oder Rat? (Es würde bestimmt auch die Arbeit derer erleichtern die mir von Zeit zu Zeit unter die Arme greifen müssen :D )
Vielen Dank im vorraus.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Ein Rezept gibt es da (leider) nicht.
Um mal Python spezifisch zu sein: Lese, nein arbeite PEP-8 durch; lese PEP-20 (oder `import this`).

Dann hast du die Grundlagen, was "gute Namen" im Python Sinn mindestens leisten sollten. Der wichtigste Schritt ist aber das eigene Hirn einzuschalten und _jeden_ Namen mit Bedacht zu waehlen und sich dabei die Fragen zu stellen,
- ob der Name alles aussagt, was er aussagen muss,
- keine Redundanzen hat (`name_list = list("Max", "Moritz")`),
- auch den Kern trifft,
- verstaendlich ist,
- kurz und praezise ist,
- ...
- mit ueblichen Konventionen uebereinstimmt.

http://docs.python.org/howto/doanddont.html ist noch lesenswert.
Ansonsten hilft hier posten und Hirn beim Lesen anschalten :)
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

cofi hat geschrieben:Der wichtigste Schritt ist aber das eigene Hirn einzuschalten und _jeden_ Namen mit Bedacht zu waehlen und sich dabei die Fragen zu stellen,
- ob der Name alles aussagt, was er aussagen muss,
Dabei ist mir aufgefallen, Du bist umgezogen von zu Hause nach 0x4461726D7374616474. Cool.
min
User
Beiträge: 37
Registriert: Dienstag 22. Dezember 2009, 22:25

Danke für den Tipp. Ich hab es mir mal angeschaut und muss sagen, dass es schon reichlich viele Tipps beinhaltet. Danke nochmals.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Wenn man Geld ausgeben will oder es sich irgendwo ausleihen kann (vmtl ist letzteres besser, weil man liest es ja auch nur einmal und danach nie wieder) ist das Buch Expert Python Programming von Tarek Ziade gar nicht schlecht. Ist halt mal wieder ein Buch von einem "Insider".
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Pekh
User
Beiträge: 482
Registriert: Donnerstag 22. Mai 2008, 09:09

Ich bin begeistert :) Meiner Meinung nach sollte dieser Thread der kleine Bruder von http://www.python-forum.de/topic-1689.html werden.
Benutzeravatar
/me
User
Beiträge: 3555
Registriert: Donnerstag 25. Juni 2009, 14:40
Wohnort: Bonn

Leonidas hat geschrieben:Wenn man Geld ausgeben will oder es sich irgendwo ausleihen kann (vmtl ist letzteres besser, weil man liest es ja auch nur einmal und danach nie wieder) ist das Buch Expert Python Programming von Tarek Ziade gar nicht schlecht. Ist halt mal wieder ein Buch von einem "Insider".
Für Einsteiger ist das Buch meiner Meinung nach der absolute Overkill.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

/me hat geschrieben:Für Einsteiger ist das Buch meiner Meinung nach der absolute Overkill.
Wir sprechen doch nicht von Einsteigern. Einsteiger haben ihre Einstigslektüre und die sollten sie natürlich erstmal fertiglesen.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

Expert Python Programming kann ich auch sehr empfehlen - bis auf das Layout .. aber man kann ja nicht alles haben.

Auch wenn der Name das nicht sagt, ist die Zielgruppe eher der Fortgeschritte Pythonista und der Autor setzt kein besonders umfassendes Grundwissen voraus. Ich hatte gerade nochmal nachgeschaut, aber leider ist das Probekapitel `Documenting your Project` und nicht das zur Namenswahl :( (aber es lohnt sich dennoch).

@hendrikS: Ja :) Wobei das dann auch wieder `zu hause` ist .. hum. (Und wenn das eine Spitze ist, dass das nicht passt, doch doch das tut es :twisted:)
philistion
User
Beiträge: 108
Registriert: Sonntag 7. Februar 2010, 14:16

Ich bin vom Python Cookbook von Alex Martelli sehr begeistert: http://oreilly.com/catalog/9780596007973

Ist Expert Python Programming das Non-Plus-Ultra in der Python-Welt?
Gibts sonst noch Experten-Lektürevorschläge?

Noch etwas fällt mir ein, ist zwar leicht Off-Topic, aber trotzdem:
Ist irgendjemandem von euch schon dieses Buch aufgefallen? http://oreilly.com/catalog/9780596516499
^ Wäre schön wenn es jemanden im Forum gäbe, der darüber was erzählen kann.. :wink:
BlackJack

@cofi: Du hast aber auch "kurz und präzise" in der Liste und da wäre 'RGFybXN0YWR0' kürzer bei gleicher Präzision. ;-)
testalucida
User
Beiträge: 6
Registriert: Donnerstag 4. Februar 2010, 19:17

bin selbst Python-Anfänger und der Meinung, dass man anfangs kein Buch, schon gar kein Profibuch, kaufen muss. Mir hat "Dive into Python" sehr gefallen. Auf http://diveintopython.org/
gibt es eine Downloadversion für lau, und bei der Erklärung eines jeglichen Sachverhalts sind immer kleine Beispiele angegeben. Da kriegt man ein Gefühl dafür, wie elegant Programmierung mit Python sein kann. Man muss es dann bloß nachmachen ;)

Was ich bei Python allerdings überhaupt nicht mag, ist die fehlende Typsicherheit. Alles lässt sich "kompilieren", und bei der Ausführung gibt's dann merkwürdige Fehler.
Deshalb kommt Python für mich nur für kleinere Programmieraufgaben infrage, bei allem anderen bleibt C++ erste Wahl.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Hallo!
testalucida hat geschrieben:Was ich bei Python allerdings überhaupt nicht mag, ist die fehlende Typsicherheit. Alles lässt sich "kompilieren", und bei der Ausführung gibt's dann merkwürdige Fehler.
Deshalb kommt Python für mich nur für kleinere Programmieraufgaben infrage, bei allem anderen bleibt C++ erste Wahl.
Meinst du nicht, dass diese Aussage für jemanden, der sich selber noch als Python-Anfänger bezeichnet, etwas gewagt ist ;-) ?
Das Leben ist wie ein Tennisball.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

testalucida hat geschrieben:Das ich bei Python allerdings überhaupt nicht mag, ist die fehlende Typsicherheit. Alles lässt sich "kompilieren", und bei der Ausführung gibt's dann merkwürdige Fehler.
Deshalb kommt Python für mich nur für kleinere Programmieraufgaben infrage, bei allem anderen bleibt C++ erste Wahl.
Naja, C++ hat auch keine Typsicherheit von der Art wie du es mit Haskell oder OCaml bekommst.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
Benutzeravatar
Käptn Haddock
User
Beiträge: 169
Registriert: Freitag 24. März 2006, 14:27

testalucida hat geschrieben: Was ich bei Python allerdings überhaupt nicht mag, ist die fehlende Typsicherheit. Alles lässt sich "kompilieren", und bei der Ausführung gibt's dann merkwürdige Fehler.
Sich einmal entschuldigen ist einfacher als x-mal um Erlaubnis zu fragen ;)
Wozu gibts Exceptions und Errorhandling?
Im übrigen bezeichne ich mich auch noch als, wenn auch ambitionierten, Anfänger. Python hab ich gewählt (auch für grösseres) weil ich damit Probleme in meinem Aufgabenbereich (Geodatenmanagement) schneller und universeller gelöst bekomme als mit irgendwas anderem.

Grußle Uwe
---------------------------------
have a lot of fun!
testalucida
User
Beiträge: 6
Registriert: Donnerstag 4. Februar 2010, 19:17

Haskell und OCaml kenne ich nicht, da kann ich nichts dazu sagen.
Ansonsten wüsste ich nicht, was an meiner Aussage "gewagt" sein soll - Beanstandung fehlender Typsicherheit hat doch nichts damit zu tun, wie lange man schon mit einer Programmiersprache zu tun hat.
Das geht doch schon bei der Definition von Methoden los, wo ich in C++, C#, Java,... schon an der Signatur erkenne, was rein und was raus kommt.
Und wenn eine Methode einen TreeNode als Argument verlangt, und ich möchte ihr beim Aufruf einen String schicken, dann meckert schon der Compiler.
Auch wichtig: Code-Vervollständigung (oder Calltips oder Intellisense oder wie man es bezeichnen möchte) funktioniert viel besser, wenn in der Methode bekannt ist, um welche Typen es geht.
Leonidas
Python-Forum Veteran
Beiträge: 16025
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

testalucida hat geschrieben:Das geht doch schon bei der Definition von Methoden los, wo ich in C++, C#, Java,... schon an der Signatur erkenne, was rein und was raus kommt.
Das liegt daran dass sie keine Typinferenz haben. Du kannst auch Typsicherheit ohne diese Definitionen haben.
My god, it's full of CARs! | Leonidasvoice vs (former) Modvoice
min
User
Beiträge: 37
Registriert: Dienstag 22. Dezember 2009, 22:25

In den meisten fortgeschrittenen Scripten steht am Ende

Code: Alles auswählen

if __name__ == '__main__':
    ## verschiedene Funktionen 
welchen Sinn hat dies. Warum sollte man eigentlich alles in Funktionen packen und nicht in eine While Schleife oder ähnliches?
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

testalucida hat geschrieben:Ansonsten wüsste ich nicht, was an meiner Aussage "gewagt" sein soll - Beanstandung fehlender Typsicherheit hat doch nichts damit zu tun, wie lange man schon mit einer Programmiersprache zu tun hat.
Doch, weil du (noch) nicht richtig einschätzen kannst, wie wichtig oder undwichtig Typsicherheit ist. Dazu solltest du schon mindestens ein größeres Projekt mit Python abgeschlossen haben. Dann wirst du sicher feststellen, dass die (Unit-)Tests die Aufgabe von Typenchecks übernehmen und man damit keinerlei Probleme hat.
Das Leben ist wie ein Tennisball.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

min hat geschrieben:In den meisten fortgeschrittenen Scripten steht am Ende

Code: Alles auswählen

if __name__ == '__main__':
    ## verschiedene Funktionen 
welchen Sinn hat dies. Warum sollte man eigentlich alles in Funktionen packen und nicht in eine While Schleife oder ähnliches?
Deine Frage ist zwar ein wenig aus dem Zusammenhang gerissen, aber ich werde sie trotzdem mal beantworten:
Der "if __name__ == '__main__'"-Guard ist dazu gedacht, dass deine Code nur aufgerufen wird, wenn du das Modul direkt ausführst. So ermöglichst du zum Beispiel, dass dein Modul von anderen importiert werden kann, ohne dass dein Programm ausgeführt wird.

In Funktionen packst du alles, um deinen Code zu modularisieren und wiederverwendbar zu machen. So verringerst du die Abhängigkeiten, teilst alles in einzelne Aufgaben auf und machst deinen Code testbar.

Was du jetzt mit dem while meinst verstehe ich nicht, bringe doch mal ein Beispiel.

Sebastian
Das Leben ist wie ein Tennisball.
Antworten