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

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.
Gast

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

Beitragvon Gast » Dienstag 6. September 2005, 17:01

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 6. September 2005, 17:24

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Dienstag 6. September 2005, 17:46

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 6. September 2005, 18:08

Unter deinem Pseudocode kann ich mir nichts vorstellen, wäre nett, wenn du einen echten Code posten könnest, der das Problem hat.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Dienstag 6. September 2005, 18:39

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 6. September 2005, 19:00

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)
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Gast

Beitragvon Gast » Dienstag 6. September 2005, 19:56

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
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Beitragvon Leonidas » Dienstag 6. September 2005, 21:10

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.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
Tester

re

Beitragvon Tester » Dienstag 6. September 2005, 21:45

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.
Benutzeravatar
gerold
Python-Forum Veteran
Beiträge: 5554
Registriert: Samstag 28. Februar 2004, 22:04
Wohnort: Telfs (Tirol)
Kontaktdaten:

Beitragvon gerold » Dienstag 6. September 2005, 22:31

Hi!

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

mfg
Gerold
:-)
http://halvar.at | Kleiner Bascom AVR Kurs
Wissen hat eine wunderbare Eigenschaft: Es verdoppelt sich, wenn man es teilt.
Gast

Beitragvon Gast » Mittwoch 7. September 2005, 07:23

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

Wer ist online?

Mitglieder in diesem Forum: 0 Mitglieder