Zuweisungen bei if?

10/04/2012 - 08:17 von Ulli Horlacher | Report spam
Ich versuche gerade ein paar Perl-Scripte nach Python umzusetzen und
wundere mich, dass Python bei bestimmten Konstrukten ziemlich umstaendlich
ist (oder ich die Syntax nicht verstehe). Beispiel:

Perl:

if (@ARGV and $ARGV[0] =~ /(\w+)/) { print "$1" }

Python:

if len(sys.argv)>1:
m = re.match(r".*?(\w+)",sys.argv[1])
if m: print m.group(1)

Mein erster Ansatz

if len(sys.argv)>1 and m = re.match(r".*?(\w+)",sys.argv[1]): print m.group(1)

erbrachte einen syntax error: Zuweisungen sind bei if nicht zulaessig?!


+ Ulli Horlacher + framstag@tandem-fahren.de + http://tandem-fahren.de/ +
 

Lesen sie die antworten

#1 Thomas Rachel
10/04/2012 - 09:26 | Warnen spam
Am 10.04.2012 08:17 schrieb Ulli Horlacher:
Ich versuche gerade ein paar Perl-Scripte nach Python umzusetzen und
wundere mich, dass Python bei bestimmten Konstrukten ziemlich umstaendlich
ist (oder ich die Syntax nicht verstehe). Beispiel:

Perl:

if (@ARGV and $ARGV[0] =~ /(\w+)/) { print "$1" }

Python:

if len(sys.argv)>1:
m = re.match(r".*?(\w+)",sys.argv[1])
if m: print m.group(1)



BTW: (s.u.)



Mein erster Ansatz

if len(sys.argv)>1 and m = re.match(r".*?(\w+)",sys.argv[1]): print m.group(1)

erbrachte einen syntax error: Zuweisungen sind bei if nicht zulaessig?!



Nein, diese beiden sind strikt getrennt. AFAICT kannst Du nur mit zwei
Ebene arbeiten, wie Du schriebst.

Aber Deine RE ist zu kompliziert. Wenn Du re.search() statt re.match()
verwendest, kannst Du das .*? weglassen:

m = re.search(r"(\w+)", sys.argv[1])


Thomas

Ähnliche fragen