Seite 1 von 1

gibt es so was wie Macro unter C/C++

Verfasst: Dienstag 6. September 2005, 17:01
von Gast
Hallo,

mein Code siehe langweilig aus, da sehr viel ähnlich Code vorhanden ist. In diesem Fall ist eine Funktion nicht schlecht, aber ich will die Variablen nicht übergeben oder als globale Variablen verwenden.

deshalb will ich keine Funktion verwenden, sondern das Script macht Copy/Paste! Gibt es so was unter Python?

gibt es eine Alternative dazu?

Danke für Hinweis oder Tips

HL

Verfasst: Dienstag 6. September 2005, 17:24
von Leonidas
Du kannst Klassen verwenden, dann musst du keine Variablen Programmglobal setzen, sonsrn kannst sie Klassenblobal verwenden was dann doch etwas besser ist.

Ein Python Präprozessor für Python.. das wäre unpythonic und unpraktisch, ganz zu schweigen von fehleranfällig und schwer zu lesen.

Verfasst: Dienstag 6. September 2005, 17:46
von Gast
Hallo Leonidas,

Jaja, Makro schwer zu lesen, aber besser als mein Copy/Paste :cry: (Makor ist doch weniger fehlerfällig, nicht vergiss die Vergleichbasis!)

Hast du besser Idee das folgende Code zu formatieren:

if (): # Topebene
....
if (): # zweite Ebene
....
if (): #dritte ...

Schlimm, nicht?

Um Tips gebeten!

HL

Verfasst: Dienstag 6. September 2005, 18:08
von Leonidas
Unter deinem Pseudocode kann ich mir nichts vorstellen, wäre nett, wenn du einen echten Code posten könnest, der das Problem hat.

Verfasst: Dienstag 6. September 2005, 18:39
von Gast
Hi Leonidas,

das Code ist nicht sinnvoll. Das Problem kann ich wie folgt beschreiben:

Ich habe ein Baum mit Unterbäumer oder nur Blätter. Ich muss zunächst ein Baum aus Bäumen finden (die erste if-Ebene). Wenn ein Baum gefunden wurde, muss ich prüfen, ob es Unterbäume gibt. So wird es das zweite if-Ebene. Die Suchtiefe geht weiter. Ich nehme an ich kann nicht binäre Suchalgorithmus verwenden, da ich gar nicht weiss, ob es gibt. Wenn es gibt, dann wird durch Zufallgerator ein gewählt und macht weiter!

Rekusiver Suche? nicht wirklich, da die unteren Ebenen nicht gleiche Eigenschaften vorhanden.

Deswegen brauche ähnliches wie Makros in C++ (dachte ich am mindestens)

Tips?

Habe ich gerade ein Idee,

gibt es so was wie in C++, Callback Funktion, oder eine Funktion kann Function als Parameter übergeben?

Du hast schon mir bei anderen Posten mehrfach geholfen, danke dir noch einmal!


HL

Verfasst: Dienstag 6. September 2005, 19:00
von Leonidas
Anonymous hat geschrieben:gibt es so was wie in C++, Callback Funktion, oder eine Funktion kann Function als Parameter übergeben?
Klar:

Code: Alles auswählen

def proc():
    print "Hi, I'm proc"

def caller(callable):
    callable()

caller(proc)

Verfasst: Dienstag 6. September 2005, 19:56
von Gast
Hi Leonidas,

danke dir, wirklich Prima! so brauche ich doch nicht mehr Makro :D

Ein Mangel noch, wenn ich Klasse verwende, gibt es kein Problem, aber ich habe nur ungebundene Funktionen und hasse globale Variablen!

Wie kann ich ohne return (eine Tuple) verwenden, die geänderte Variable zurück zu bekommen(z.B. ein String, unmutable! )


Tips?

HL

Verfasst: Dienstag 6. September 2005, 21:10
von Leonidas
Anonymous hat geschrieben:Ein Mangel noch, wenn ich Klasse verwende, gibt es kein Problem, aber ich habe nur ungebundene Funktionen und hasse globale Variablen!
Hihi, willkommen im Club, ich mag globale Variablen auch nicht :D

was spricht dagegen aus einem Code wie

Code: Alles auswählen

var = 'OOP'
def pv():
    print var

pv()
var = 'Functional'
pv()
wo globale Variablen vorkommen sowas wie:

Code: Alles auswählen

class App(object):
    def __init__(self):
        self.var = 'OOP'

    def pv(self):
        print self.var

a = App()
a.pv()
a.var = 'Functional'
a.pv()
zu machen?
Anonymous hat geschrieben:Wie kann ich ohne return (eine Tuple) verwenden, die geänderte Variable zurück zu bekommen(z.B. ein String, unmutable! )
Ich weiß nicht genau was du meinst.. meinst du einen Rückgabewert aus einer Funktion zu bekommen, ohne sie zu beenden? Das geht nicht direkt, macht auch eher wenig sinn, jedoch kannst du das Schlüsselwort yield benutzen, mit dem du die Funktion 'pausierst', Werte zurückgibst und dann an der gleichen Stelle fortsetzt. Wenn es das ist was du suchst, dann solltest du bei einer Recherche nach Generatoren fündig werden.

re

Verfasst: Dienstag 6. September 2005, 21:45
von Tester
Gast:

>>Wie kann ich ohne return (eine Tuple) verwenden, die geänderte Variable zurück zu bekommen(z.B. ein String, unmutable! ) <<

Meinst Du so etwas wie "call-by-reference" in C, also beispielsweise

Code: Alles auswählen

f(char* s, int* n){*n = 3; *s = '\0'; }
??
Das geht wohl, wenn man in Python die Argumente in Form einer Liste (mutable) übergibt:

Code: Alles auswählen

def f(L):
    L[0]="hallo"

M=["egal"]
f(M)
-- nun ist M gleich "hallo", also wurde das Erebnis von f im
Argument M zurückgegeben (ohne return zu verwenden).

Edit (Loenidas): Code in Tags gesetzt.

Verfasst: Dienstag 6. September 2005, 22:31
von gerold
Hi!

Zu diesem Thema sollte ich unbedingt diesen Link beisteuern:
http://www.python-forum.de/viewtopic.php?t=3210

mfg
Gerold
:-)

Verfasst: Mittwoch 7. September 2005, 07:23
von Gast
Hallo zusammen!

vielen Dank für die Vorschläge!

Zu Leonidas: ich suche keine Funktionaltiät wie Generator. Vielleicht sollte ich doch Klasse verwenden, deine Funktion hat nicht direkt global aVar verwendet, aber trotzdem unsicher!

zu Tester: Trick zum Element 0 von einer Liste ist ok, aber doch nur ein Misbrauch :lol:

Zu gerold: dein Link hat mich die Entscheidung geholfen.

Dank alle!

HL