<txp:article status="sticky" limit=1 /> ->  Textpattern Warning: Die Werte für Attribute müssen in Hochkommata eingeschlossen werden  on line 916
textpattern/lib/txplib_misc.php:916 trigger_error()
textpattern/publish.php:1090 splat()
textpattern/publish.php:1012 processTags()
textpattern/publish.php:496 parse()
index.php:33 textpattern()
Peterpedia-Flash: python &#38; other sloppy hacks
Übersicht Peterpedia lesen What's up Peterpedia? Administration Suche

Snippet of the moment II · Jan 15, 15:40 von stargaming

Falls ihr mal wieder True mit False überschrieben haben solltet, hilft euch eventuell folgendes oder ähnliches:

python:
  1. >>> id(True)
  2. 505171652
  3. >>> id(False)
  4. 505171640
  5. >>> True = False
  6. >>> id(True)
  7. 505171640
  8. >>> True is False
  9. True
  10. >>> id(True is False)
  11. 505171652

..oder auch 1 is 1.

Artikel bearbeiten

Kommentieren

Snippet of the moment I · Jan 14, 00:48 von stargaming

\r ist das neue Lieblingszeichen der Woche. \r ist der carriage return oder auch “Wagen- oder Zeilenrücklauf”. (Wer mal eine Schreibmaschine hatte, erinnert sich dran: Rücklauf & Zeilenvorschub)
Wie man ihn für lustige Konsolenspielereien benutzen kann, sieht man hier:

python:
  1. >>> print "Wer das liest ist doof\rHallo Welt!           "
  2. Hallo Welt!

Der aufmerksame Leser wird sich fragen “Nanu, was sollen die vielen Leerzeichen da?” Bravo, Sie haben die Lücke in dieser Verhaltensweise gefunden:

python:
  1. >>> print "Wer das liest ist doof\rHallo Welt!"
  2. Hallo Welt!st ist doof

Wenn man jetzt da noch ein paar Spielereien drumwrappt, kriegt man da ganz hübsche Sachen heraus:

python:
  1. from time import sleep
  2. for i in xrange(101):
  3.     print "\r" + "%03i %s" % (i, ('|', '/', '-', '\\')[i%4]),
  4.     sleep(0.1)

Wenn man das dann noch erweitert, hat man eine Progressbar, die sich sehen lassen kann.

python:
  1. from time import sleep
  2. width = 65
  3. templ = "[%%-%ds]  %%s  %%s" % width
  4. for i in xrange(101):
  5.     print "\r" + templ % (
  6.                           '|'*(i*width/100),
  7.                           'done' if i == 100 else '% 3d%%' % i,
  8.                           ('|', '/', '-', '\\')[i%4]
  9.                          ),
  10.     sleep(0.08)

Artikel bearbeiten

Kommentieren

namespaces are one honking great idea · Dez 3, 19:46 von stargaming

python:
  1. >>> import this
  2. """
  3. The Zen of Python, by Tim Peters
  4. [...]
  5. Namespaces are one honking great idea -- let's do more of those!
  6. """

Genau das denkt man sich, wenn man ein Wochenende lang die Globalisierung von PHP genießen durfte.
Es ist einfach ein schrecklicher Zustand bei PHP, der die Funktionen so wirr auseinanderreißt.

Allein schon die Stringoperationen sind wild durch die Bibliothek und Namensgebung verteilt. Manche fangen mit str an (z. B. strcmp, strpos, strtoupper), manche mit str_ (z. B. str_replace, str_word_count, str_repeat), manche hängen einfach so irgendwo (z. B. substr und Stringfunktionen). Unübersichtlich, aufgeblasen und verworren.

Artikel bearbeiten

Kommentieren

2.5 functools.partial gegen lambda · Sep 25, 17:18 von stargaming

Mit dem Release von 2.5 und der functools-Bibliothek stehen einem jetzt zwei Wege zur Verfügung, einen Wrapper für eine Funktion zu schreiben, der Standardwerte für einige Argumente mitliefert:

python:
  1. import functools
  2. wrapper = functools.partial(function, kwarg=defaultval)

python:
  1. wrapper = lambda *x, **y:function(*x, **y, kwarg=defaultval)


Der Vergleich

Ich hab mich mal gefragt, wie die beiden im Belastungstest abschneiden und ein kleines Benchmark geschrieben:

python:
  1. #!/usr/bin/env python
  2. #encoding: latin-1
  3. from timeit import Timer
  4. def bench(expr, times=10000, rep=500, pre=""):
  5.     x = Timer(expr, pre).repeat(rep, times)
  6.     print "%s times %s*%s gave min/max/avg: %s / %s / %s" % \
  7.           (rep, times, expr, min(x), max(x), sum(x) / rep)
  8. bench("f = lambda x:int(x, 2); f('1'*20)")
  9. bench("f = partial(int, base=2); f('1'*20)", pre="from functools import partial")


Resultat:

$ partialVSlambda.py
10000 times 500*f = lambda x:int(x, 2); f('1'*20) gave min/max/avg: 0.000659022305907 / 0.0168946053199 / 0.000875234533998
10000 times 500*f = partial(int, base=2); f('1'*20) gave min/max/avg: 0.000935593769601 / 0.0132583889852 / 0.00122811871341

Lambda ist für so Kleinkrams also wohl eindeutig noch schneller.

Artikel bearbeiten

Kommentieren

Neuere