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.
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.
Benutzeravatar
hendrikS
User
Beiträge: 420
Registriert: Mittwoch 24. Dezember 2008, 22:44
Wohnort: Leipzig

@Cofi: Das Rätsel war nicht so schwer.

Code: Alles auswählen

print "0x"+"%X"*9%tuple(map(ord,"Darmstadt"))
Und um noch was zur eigentlichen Frage zu sagen. Verbessern tut man sich fast automatisch mit zunehmender Erfahrung. Das erfordert aber ständiges und regelmäßiges Anwenden. Auch wenn es nur einen offensichtlichen Weg geben soll, gibt es doch meistens mehrere Wege zur Lösung. Auch mal versuchen den nicht offensichtlichen Weg einzuschlagen. Hat die größten AHA Effekte.
min
User
Beiträge: 37
Registriert: Dienstag 22. Dezember 2009, 22:25

@EyDu: Danke für die Antworten. Das mit der while-Schleife hat sich schon mit den anderen Fragen beantwortet.
Benutzeravatar
cofi
Python-Forum Veteran
Beiträge: 4432
Registriert: Sonntag 30. März 2008, 04:16
Wohnort: RGFybXN0YWR0

hendrikS hat geschrieben:@Cofi: Das Rätsel war nicht so schwer.

Code: Alles auswählen

print "0x"+"%X"*9%tuple(map(ord,"Darmstadt"))
Joa das sollte es auch nicht 8) Aber folgender Code macht das schoener ;)

Code: Alles auswählen

>>> print "0x" + "Darmstadt".encode("hex")
0x4461726d7374616474
@BlackJack: Hmm. Das ist aber nich so cool :D

@testalucida: Bei C++ vom Typsicherheit zu sprechen ist fahrlaessig. Im Gegensatz zu C++ ist Python zum Beispiel streng typisiert. Python kennt nur keine statische Typisierung, sondern benutzt Protokolle, d.h. duck typing. Das Probleme erst zur Laufzeit erkannt werden ist durchaus ein Problem. Aber C++ loest das nicht besser, sondern kann nur die syntaktischen Fehler konkret aufzeigen, andere semantische Fehler nicht wirklich. Diese "Sicherheit" ist truegerisch. Auch bei statisch typisierten Sprachen benoetigt man Unit Tests. (Die Vervollstaendigung hat btw wenig mit Typen zu tun, sondern damit dass der Code statisch ist)

@min Man sollte keinen Code auf die oberste Ebene packen, weil er beim Importieren ausgefuehrt wird. Passiert das nicht (oder ist es noetig) ist das durchaus vertretbar. Aber durch die Gliederung kann man den Code gut beschreiben und damit lesbarer machen.
min
User
Beiträge: 37
Registriert: Dienstag 22. Dezember 2009, 22:25

Noch eine kleine Frage. Zwar ist es noch stärker aus dem Kontext gerissen, aber ich kenne bis lang keinen passenderen Ort für diese vorerst letzte Frage.
Ich würde gerne in PyGame ein kleines Programm schreiben, in Vollbild, bei dem man einmal eine Ebene hat auf der das Menü und andere Auswahlmöglichkeiten sind und "darunter" eine Ebene mit einer graphischen Oberfläche. Wie sollte man so etwas am besten angehen. Was in welche Funktionen stecken. Über eine kleine Starthilfe wäre ich sehr dankbar.
EyDu
User
Beiträge: 4881
Registriert: Donnerstag 20. Juli 2006, 23:06
Wohnort: Berlin

Und da ist er, der Moment, in dem man einen neuen Thread startet ;-)
Das Leben ist wie ein Tennisball.
BlackJack

@cofi: Warum ist 'hex' cooler als 'base64'!? :-)
Antworten