Magisches Verhalten in Perl und Python

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.
Benutzeravatar
sunmountain
User
Beiträge: 89
Registriert: Montag 13. März 2006, 17:18

Magisches Verhalten in Perl und Python

Beitragvon sunmountain » Mittwoch 7. Februar 2007, 22:30

Edit (Leonidas): Vom Thread "Code Converter?" abgetrennt.

birkenfeld hat geschrieben: ... in Perl manche Konstruktionen teilweise beim Ausführen erst ihre Bedeutung festlegen ...


Wie z.B. so 'einfache' Dinge wie Skalare oder Listen Kontexte ...
... dafür vermisse ich in Python den ~= Operator
und $1 .. $n

Edit (Leonidas): Vom Thread "Code Converter?" abgetrennt.
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Ja,

Beitragvon Leonidas » Donnerstag 8. Februar 2007, 14:25

sunmountain hat geschrieben:... dafür vermisse ich in Python den ~= Operator

Nutzt du si häufig reguläre Ausdrücke in Python wie in Perl?

sunmountain hat geschrieben:und $1 .. $n

Das entspricht nicht der Python-Idee und wird es hoffentlich nie geben. Variablen die sich magisch mit Werten füllen *schauder*.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Re: Ja,

Beitragvon PmanX » Donnerstag 8. Februar 2007, 19:10

Leonidas hat geschrieben:Das entspricht nicht der Python-Idee und wird es hoffentlich nie geben. Variablen die sich magisch mit Werten füllen *schauder*.


So schlecht, dass man mit re und groups() große Teile dieser Magie ins Boot genommen hat :wink:
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Re: Ja,

Beitragvon Luzandro » Donnerstag 8. Februar 2007, 19:26

PmanX hat geschrieben:So schlecht, dass man mit re und groups() große Teile dieser Magie ins Boot genommen hat :wink:


Ich seh hier keinen Zusammenhang - wo passiert da irgendwas magisches oder tauchen plötzlich irgendwelche variablen auf?
Benutzeravatar
Leonidas
Administrator
Beiträge: 16023
Registriert: Freitag 20. Juni 2003, 16:30
Kontaktdaten:

Re: Ja,

Beitragvon Leonidas » Donnerstag 8. Februar 2007, 19:31

Luzandro hat geschrieben:
PmanX hat geschrieben:So schlecht, dass man mit re und groups() große Teile dieser Magie ins Boot genommen hat :wink:


Ich seh hier keinen Zusammenhang - wo passiert da irgendwas magisches oder tauchen plötzlich irgendwelche variablen auf?

Ich sehe da ebensowenig Magie. Reguläre Ausdrücke haben ein genau festgelegtes Verhalten und geben immer Treffer beim Matchen zurück die man abfragen kann. Es werden keine externen Variablen modifiziert, weder globale noch so etwas wie re.match_1 oder ähnliches.
My god, it's full of CARs! | Leonidasvoice vs Modvoice
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Donnerstag 8. Februar 2007, 19:33

Code: Alles auswählen

>>> p = re.compile('(a(b)c)d')
>>> m = p.match('abcd')
>>> m.group(0)
'abcd'
>>> m.group(1)
'abc'
>>> m.group(2)
'b'

sehe ich nicht so.
Benutzeravatar
Luzandro
User
Beiträge: 87
Registriert: Freitag 21. April 2006, 17:03

Beitragvon Luzandro » Donnerstag 8. Februar 2007, 19:43

Du sprichst hier von regulären Ausdrücken und dass du von deinem Match-Objekt die einzelnen gematchten Gruppen abfragen kannst, was ja wohl auch der Sinn davon ist - was Leonidas kritisiert hat, ist dass sich bei Perl durch eine Aktion irgendwelche anderen globalen Werte ändern.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Donnerstag 8. Februar 2007, 19:57

Wo ist $1 .. $n global?
Benutzeravatar
mitsuhiko
User
Beiträge: 1790
Registriert: Donnerstag 28. Oktober 2004, 16:33
Wohnort: Graz, Steiermark - Österreich
Kontaktdaten:

Beitragvon mitsuhiko » Donnerstag 8. Februar 2007, 20:03

Luzandro hat geschrieben:...irgendwelche anderen globalen Werte ändern.

thread lokale...
TUFKAB – the user formerly known as blackbird
BlackJack

Beitragvon BlackJack » Donnerstag 8. Februar 2007, 20:18

Auf jeden Fall sind sie nicht lokal zur re-Funktion in Perl. Die nicht einmal eine Funktion sondern ein eigenes Syntax-Konstrukt ist. Alles sehr magisch. Bei Python hat man Objekte und Methoden mit der gleichen Semantik wie alle anderen Objekte und Methoden. Kein spezielles Syntaxkonstrukt, keine magischen Variablen, also weniger das man neben den, sowieso schon nicht ganz einfachen, regulären Ausdrücken lernen und behalten muss.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Donnerstag 8. Februar 2007, 20:42

Ja gut, man braucht eine Methode um den eingefangenen String abzuholen.
Wenn die "Magie" nicht wäre, müßte man den RegEx zweimal ansetzen. Matcht & Klammern auslesen.

**Edit**
Die "magischen Variablen" werden im nächsten Block durch den aktuellen Match überdeckt. Ich hatte da nie Probleme.

Rein aus Interresse schaue ich mir seit einigen Tagen Python an. Aus heutiger Sicht kann ich sagen: Für komplexe, umfangreiche Programme ist Python eine gute Wahl. Für String- Textverarbeitung will ich die RegEx und Magie von Perl!
Benutzeravatar
Joghurt
User
Beiträge: 877
Registriert: Dienstag 15. Februar 2005, 15:07

Beitragvon Joghurt » Freitag 9. Februar 2007, 20:42

Was Leonidas meint, ist das folgendes unpythonic ist

Code: Alles auswählen

>>> foo
NameError: 'foo' is not defined
>>> IrgendeinekomischeFunktion()
>>> foo[4]
42
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Samstag 10. Februar 2007, 15:03

Da fehlt mir die Fantasie. :?:
sape
User
Beiträge: 1157
Registriert: Sonntag 3. September 2006, 12:52

Beitragvon sape » Samstag 10. Februar 2007, 15:55

PmanX hat geschrieben:Da fehlt mir die Fantasie. :?:
Warum?
``foo`` existier nicht, was durch die exception ``NameError:`` angedeutet wird. Nun wird ``IrgendeinekomischeFunktion`` aufgeruffen die auf "magischerweise" ``foo`` in den globalen namenspace erzeugt. Danach ist ``foo`` existent und man kann darauf auf einmal zugreifen. Sehr Magisch oder? So änlich verhält es sich auch mit $`, $', etc bei Perl beim Gebrauch von regex (/.../).

Ich finde Joghurt hat das sehr anschaulich dargestellt.
PmanX
User
Beiträge: 123
Registriert: Donnerstag 25. Januar 2007, 13:50
Wohnort: Germany.BB.LOS
Kontaktdaten:

Beitragvon PmanX » Samstag 10. Februar 2007, 16:23

In welchen Namensraum?

[code=]#!/usr/bin/perl -w

sub eine_komisch_funktion {
my $x = 'aabbaa';
print "Inhalt von \$1: $1\n" if ($x =~ /(ab)/);
return 1;
}

eine_komisch_funktion;

print $1[/code]

$ ./test.pl
Inhalt von $1: ab
Use of uninitialized value in print at test.pl line 11.

Wer ist online?

Mitglieder in diesem Forum: Bing [Bot]