Wir rutschen jetzt kräftig ins OT, aber hier mal ein paar Beispiele die mir direkt einfallen:
Ja, spielt aber eh keine Rolle mehr..
Python ist schwach typisiert.... außer wenn es ihm grade passt:
Code:
i = 10
#Geht nicht da Integer nicht implizit nach String casted werden kann
print("Wert ist "+i)
Ach jetzt kapiere ich das, habs gerade nochmal gelesen.
Ja, so macht man das ganz sicher nicht. Addierst du in C++ auch Stings mit Integer, Real oder sonst anderen Datentypen? Welche Sprache lässt sich denn so vergewaltigen? Python ist stark und dynamisch Typisiert. Ich weiß nicht wo du her hast, dass Python schwach typisiert wäre.
Ginge aber so:
Code:
print("Wer ist {}".format(i))
print('Wer ist',i)
print('Wer ist %s' % i)
print('Wer ist %d' % i)
#Mit Gettext
print(_("Hello {}.").format(name))
Die Sprache ist extrem instabil zwischen Major-Versionen:
Code:
#Python 2: print ist ein Sprach-Konstrukt
print "Hallo Welt"
#Python 3: print ist eine Methode
print("Hallo Welt")
Ja, das stimmt. Es hat seine Gründe. z.B. ist xrange jetzt range. Das print jetzt eine Funktion ist, finde ich auch gut.
Python2 lässt keine Sonderzeichen wie äöü in den Kommentaren(!) oder hardcoded-Strings zu ausser man aktiviert explizit am Anfang der Datei UTF-8
Code:
# -*- encoding: utf-8 -*-
Jap, ich habe mir angewöhnt Englisch in meinen Programmen zu nutzen. Hardcoded Stings mit u'sting'. Wenn es andere verstehen sollen, führt eh kein Weg dran vorbei. i18n mit gettext...
Einer der Vorteile - keine Klammern - wird schnell ein Nachteil bei copy/paste oder Text-Verkehr wenn auch nur ein einziges Leerzeichen verrutscht.
Haha, ja das passiert immer mir.. Grundsätzlich!
Die Sprache mischt OOP stark mit prozedural:
Code:
#Existiert nicht
Wert = "hallo"
print("Länge: ",Wert.length)
#Sondern es geht über eine globale Funktion die man entsprechend nicht verändern kann
Wert = "hallo"
print("Länge: ",len(Wert))
Doch kannst du:
Code:
#Python 2.7
>>> class str2(str):
def __len__(self):
return 42
>>> s = str2('Hallo')
>>> len(s)
42
Wenns dir nicht passt, packst du halt noch die Methode length mit rein.
Das Nächste was es an einem einfachen Objekt-Handler gibt muss man sich selber bauen:
Code:
class Object(object):
def __init__(self, dict={}):
super().__init__()
self.__dict__.update(dict)
Ih, sieht ja hässlich aus :-D
Hab ich bisher zum Glück nicht gebraucht... Bis jetzt
Es fehlen Basis-Funktionen wie bspw zur Feststellung ob eine Eingabe ein Integer ist, Eigenbau notwendig...
Code:
def is_int(a):
try:
int(a)
return True
except ValueError:
return False
Oha :-D
Wie wär es mit a.isdigit() bei einem String? raw_input == string
Und an anderer Stelle: isinstance(a, int)
Für die ganz Harten halt regex.
Ich könnte noch viel weiterfahren, zusammengefasst fühlt sich Python viel zu sehr nach einer Lernsprache an als nach einer echten Programmiersprache. Klar, die Basis-Ideen sind gut aber sie werden absolut nicht konsequent verfolgt, auf Python's Syntax aufbauende (Pseudo)sprachen wie Coffeescript sind da doch imho bedeutend übersichtlicher.
Ja, ich hab erst mit ShellScripting angefangen, wobei mich dort das Escapen ziemlich genervt hat. Dann hab ich Python gelernt und ehrlich gesagt könnte ich mich übergeben, wenn ich C-Code lese. Ein Teil verstehe ich, aber irgendwann schalte ich ab und sage mir, dass ich das nicht verstehen will. Nein, es nervt mich sogar, lieber Programmiere ich einen Roboter in irgendeiner Sprache, der ich zuvor noch nie begegnet bin...
Die Sprachen an sich sind nur ein Werkzeug. Wie man sie einsetzt, ist eine ganz andere Sache.Viele Sachen werden in Python falsch gemacht, weil die man aus anderen Sprachen Konstrukte übernimmt. Entweder man liebt oder man hasst python. Es wundert mich, dass du nicht die Einrückung bemängelt hast (außer Copy&Paste)
Zuletzt kann ich noch dieses Video empfehlen:
http://www.youtube.com/watch?v=OSGv2VnC0go
Da werden so einige Dinge gezeigt, die eigentlich alle falsch machen.
Achja, noch was:
http://docopt.org/
Programmiere das mal in C/C++ nach :-D
Hab es ausprobiert und es funktioniert wie vorgesehen. Da lernt man gleichzeitig noch ein bisschen was über IEEE 1003.1