judy2k / stupid-python-tricks

Stupid Python tricks.
The Unlicense
145 stars 27 forks source link
decorators ish language-features metaclass python

Stupid Python Tricks

This is (or will be) a consolidated repository of all the stupid Python tricks I have written (and can still find).

A stupid python trick is usually an experiment with an advanced language feature; ostensibly to learn how it works, but usually in order to abuse that feature to write something truly horrible.

I used to be a Perl programmer.

I am also no longer the only person responsible for all of this.

fizz_buzz_abomination

This one got out of hand. It is an attempt to write Fizz Buzz, using as many language features as possible. It uses a bunch of functional techniques, a strategy pattern implementation, and dynamically named closures (I was especially proud of that).

It is PEP-8 compliant.

one_line_regex

A friend of mine used to complain that he couldn't run a regex as part of an if statement's expression if he wanted to use the returned groups (you can in Perl using implicit variables).

I worked out how to modify the caller's scope to dynamically add a variable containing the result of the pattern match. Mission accomplished.

Ish

Ish is a stupid library that allows you to test if a variable is tru-ish or false-ish. Ish has graduated to its own repository!

marge_simpson

I wanted to see if I could create an emoticon that was valid Python syntax. It turns out I could! OOO[:-P]

clever_path_ob

Subclass str, add a bunch of interesting properties and methods, and voila, easy path management, if a little bit too much voodoo.

Note: I'm not 100% sure I wrote this. Some of it doesn't seem like my style. It's possible I came up with inspiration from looking at someone else's code.

decorator_experiments

Contains an 'everlasting cache' (which is not very useful), and a (crazy) decorator-based dependency calling mechanism. Warning, may cause seizures!

stupid_metaclass_tricks

Only one trick! A metaclass that automatically replaces get_ and set_ methods with properties that call the methods. Too much magic, but a neat trick, I think.

super_considered_obligatory

Ever forget to call tearDown your test's superclass? Now you can ensure that any class inheriting fro you doesn't forget to call super().method implicitly.

If that's too much magic, there is also a decorator you can put on a method to ensure that we call super().

true_false

You've all heard of the classic #define TRUE FALSE trick in C, right?

gradually_worse_pi

Import this module, then import math and print out pi in a loop. I guarantee you'll be surprised!

autoargs

It's so tiresome writing constructors that copy all their arguments to self. Now you can just use this very clever @autoargs decorator, and all will be done for you!