Seite 1 von 1

methode replace mögliche warum?

Verfasst: Montag 14. Dezember 2009, 10:27
von kostonstyle
hallo miteinander
eine frage zu dieser code ausschnitt

Code: Alles auswählen

b = os.path.join(a, 'excourse.py').replace('/', '=')
warum ist hier die replace methode möglich? replace ist doch ein built-in function von string.

gruss kostonstyle

Verfasst: Montag 14. Dezember 2009, 10:33
von kostonstyle
bin gerade mit replace am experentieren
folgendes:

Code: Alles auswählen

c = 'Hallo / Du / super / genie'.replace('/', '*')
c = 'Hallo / Du / super / genie'
c.replace('/', '*')
warum funktioniert die letzte zwei Zeile nicht oder erste schon?

Verfasst: Montag 14. Dezember 2009, 10:35
von jbs
Strings sind immutable und os.path.join gibt einen String zurück.

Den Rest musst du selber herausfinden.

Verfasst: Montag 14. Dezember 2009, 10:42
von kostonstyle
ok....es leuchtet mir nun einbisschen ein
nun wieso kann man replace einfach hinten an schreiben, was ist das für eine art von methode?

noch eine frage zu module, wenn ich eine module einbinde, der in unter mehrere pakete befindet, welche __init__.py file für der compiler aus?

gruss kostonstyle

Verfasst: Montag 14. Dezember 2009, 10:47
von jbs
noch eine frage zu module, wenn ich eine module einbinde, der in unter mehrere pakete befindet, welche __init__.py file für der compiler aus?
bitte?

replace ist eine Methode.

Verfasst: Montag 14. Dezember 2009, 11:01
von kostonstyle
Replace ist eine Methode, aber warum kann man ein einfach hinter einen string .replace schreiben?
Ein Beispiel zu module frage

Code: Alles auswählen

package1->__init__.py
    |
    |
    package2->__init__.py
         |
         |
         package3->__init__.py
         Hier befindet zum Bespiel das Module math.
ich binde nun in file.py das module math ein. welche __init__.py datei von diesen 3 pakete führt der compiler aus?

Gruss kostonstyle

Verfasst: Montag 14. Dezember 2009, 11:09
von Defnull
kostonstyle hat geschrieben:ok....es leuchtet mir nun einbisschen ein
nun wieso kann man replace einfach hinten an schreiben, was ist das für eine art von methode?

Code: Alles auswählen

x = a()
y = x.b()
z=x.c()
ist das selbe wie

Code: Alles auswählen

z = a().b().c()
Du kannst also mit dem Rückgabewert von a() sofort weiter machen, ohne ihn in eine zwischen-variable speichern zu müssen.
kostonstyle hat geschrieben: noch eine frage zu module, wenn ich eine module einbinde, der in unter mehrere pakete befindet, welche __init__.py file für der compiler aus?
In sys.path() stehen mehrere Verzeichnisse, die nacheinander nach dem gesuchten Modul durchsucht werden. Der erste Treffer zählt.

Verfasst: Montag 14. Dezember 2009, 11:20
von kostonstyle
aha, dann führt es nur die __init__.py datei aus, indem sich das module befindet?

Verfasst: Montag 14. Dezember 2009, 11:27
von Defnull
Module befinden sich nicht in py-Dateien. py-Dateien sind Module. Oder teile von Paketen.

Wenn du mit "import rtfm" ein Modul mit dem Namen "rtfm" importierst, dann sucht Python in allen Verzeichnissen in sys.path so lange, bis er entweder eine Datei namens "rtfm.py" oder ein Verzeichnis mit dem Namen "rtfm" und einer "__init__.py" Datei findet. Je nach dem, was er zuerst findet, wird entweder die rtfm.py oder die rtfm/__init__.py aus geführt.

Normalerweise sind Modulnamen aber einzigartig und es sollte keine Frage der Reihenfolge der sys.path Einträge sein, was importiert wird. Die Suche ist nicht rekursiv, das heißt "from rtfm import dau" importiert etwas anderes als "import dau"

Verfasst: Montag 14. Dezember 2009, 11:45
von kostonstyle

Code: Alles auswählen

Normalerweise sind Modulnamen aber einzigartig und es sollte keine Frage der Reihenfolge der sys.path Einträge sein, was importiert wird. Die Suche ist nicht rekursiv, das heißt "from rtfm import dau" importiert etwas anderes als "import dau"
wenn das module dau im paket rtfm befindet, wird aber zuerst __init__.py ausgeführt und danach erst dau oder?
jetzt verstehe ich es langsam from ist immer ein paket und import kann eine Klasse oder eine Funktion sein.

Verfasst: Montag 14. Dezember 2009, 11:57
von jbs

Verfasst: Montag 14. Dezember 2009, 13:46
von HWK
Defnull hat geschrieben:

Code: Alles auswählen

x = a()
y = x.b()
z=x.c()
ist das selbe wie

Code: Alles auswählen

z = a().b().c()
Nein. Du meinst:

Code: Alles auswählen

z = y.c()
MfG
HWK

Verfasst: Montag 14. Dezember 2009, 13:51
von kostonstyle
also __init__.py wird ausgeführt ein module von package importiert wird. Damit sämtlichen Variablen initialisiert.

Verfasst: Montag 14. Dezember 2009, 14:04
von /me
kostonstyle hat geschrieben:also __init__.py wird ausgeführt ein module von package importiert wird. Damit sämtlichen Variablen initialisiert.
Sollte ich dir hiermit zu nahe treten bedauere ich das, aber wenn du Legastheniker sein solltest dann schreib es in die Signatur, so dass man sich darauf einstellen kann. Sollte das nicht der Fall sein dann bitte ich dich, deine Beiträge so zu verfassen, dass zumindest elementare Grammatikregeln eingehalten werden ("Dieser Satz kein Verb").

Du bist hier nicht im Chat und kannst dir somit mit dem Formulieren durchaus etwas Zeit lassen. Es hilft weder dir noch uns wenn wir raten müssen, was du mit deinem Beitrag eigentlich gemeint hast.

Verfasst: Montag 14. Dezember 2009, 16:33
von kostonstyle
entschuldige für die unverständliche Formulierung. Deutsch ist nicht meine Muttersprache. Habe auch vergessen, den Satz nochmals durch zulesen.
Also nochmals von Anfang
Wenn ich ein Module importiere und der befindet sich im Paket xy, dann wird zuerst die __init__.py ausgeführt um die Variablen zu aktualisieren. Nein ok habe jetzt die Frage selber beantwortet.
Vielen Dank leute

Verfasst: Montag 14. Dezember 2009, 20:03
von Dauerbaustelle
kostonstyle hat geschrieben:Deutsch ist nicht meine Muttersprache.
Dann bin ich mal so frei, dich darauf aufmerksam zu machen, dass es ein Modul (ohne e), aber zwei Module (mit e) sind, und das das Geschlecht neutral ist, also "das Modul", und nicht "der Modul".
kostonstyle hat geschrieben:Wenn ich ein Module importiere und der befindet sich im Paket xy, dann wird zuerst die __init__.py ausgeführt um die Variablen zu aktualisieren.
Naja, in der __init__.py kann man auch andere Sachen machen als "Variablen aktualiseren", genau genommen "alles" ;-)

Verfasst: Montag 14. Dezember 2009, 20:06
von cofi
Dauerbaustelle hat geschrieben:Naja, in der __init__.py kann man auch andere Sachen machen als "Variablen aktualiseren", genau genommen "alles" ;-)
Man sollte sich das aber IMHO zweimal ueberlegen.
Das gilt auch fuer "Variablen aktualisieren", eigentlich sogar insbesondere dafuer, denn aktualisieren riecht fuer mich verdaechtig nach Logik an einer Stelle an der sie nicht wirklich erwartet wird.