Re: Warum nimmt sum() keine strings?
Verfasst: Mittwoch 14. November 2012, 14:52
@mutetella: Ein paar Beispiele für syntaktischen Zucker:
Das heisst syntaktischer Zucker weil es etwas ”Süsses” ist, was man auf die Syntax noch oben drauf ”streut” um die Sprache ”leckerer” zu machen. Aus dem Blickwinkel könnte man jetzt sagen, dass die beiden letzten Beispiele kein Zucker für ”oben drauf” sind, sondern welcher den man eigentlich als Grundzutat in der ”Sprachbackmischung” erwarten würde. Das hat aber nicht jede Sprache — Java-Programmierer mussten lange auf eine „for-each”-artige Schleife warten und im letzten Java mit dem ich zu tun hatte (Java 6) musste man für Rückruf”funktionen” immer noch Klassen mit einer Methode schreiben, die einen von der API festgelegten Namen haben musste.
Code: Alles auswählen
ys = [f(x) for x in xs if p(x)]
#
# Zucker für:
#
ys = list()
for x in xs:
if p(x):
ys.append(f(x))
# ----
ys = (f(x) for x in xs if p(x))
#
# Zucker für:
#
def gf():
for x in xs:
if p(x):
yield f(x)
ys = gf()
# ----
def gf():
init()
while True:
if end_condition():
break
yield next_result()
#
# Zucker für:
#
class Iterator(object):
def __init__(self):
init()
def __iter__(self):
return self
def next(self):
if end_condition():
raise StopIteration
return next_result()
gf = Iterator()
# ----
with create_context() as c:
do_something(c)
#
# Zucker für (vereinfacht):
#
c = create_context().__enter__()
try:
do_something(c)
finally:
c.__exit__()
# ----
lambda x: do_something(x)
#
# Zucker für:
#
def temporary_name(x):
return do_something(x)
# ----
for x in xs:
do_something(x)
#
# Zucker für:
#
xs_iterator = iter(xs)
while True:
try:
x = xs_iterator.next()
except StopIteration:
break
do_something(x)
# ----
def f():
do_something()
#
# Zucker für:
#
class F(object):
def __call__(self):
do_something()
f = F()