Skip to content

Instantly share code, notes, and snippets.

View akaptur's full-sized avatar

Allison Kaptur akaptur

View GitHub Profile
@akaptur
akaptur / collections.py
Created July 30, 2014 14:01
Named tuples from Python's Lib/collections.py
################################################################################
### namedtuple
################################################################################
_class_template = '''\
class {typename}(tuple):
'{typename}({arg_list})'
__slots__ = ()
@akaptur
akaptur / gist:bb7981515824b79c96e3
Created September 10, 2014 18:48
bash caching, viewed with `type`
byterun_env ⚲ type python
python is /usr/local/bin/python
byterun_env ⚲ source bin/activate
(byterun_env)byterun_env ⚲ type python
python is /Users/afk/Dropbox/python/byterun_env/bin/python
(byterun_env)byterun_env ⚲ python
Python 2.7.6 (default, Feb 11 2014, 18:46:41)
[GCC 4.2.1 Compatible Apple LLVM 4.2 (clang-425.0.28)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>>
def write_chained_functions(total_functions):
with open('/usr/share/dict/words','r') as name_file:
fn_names = [line.strip() for line in name_file.readlines()]
first_name = fn_names[0]
last_name = fn_names[total_functions]
fn_names = iter(fn_names)
with open("empty_chain.py", 'w') as f:
name = next(fn_names)
following_name = next(fn_names)
for _ in range(total_functions):
def write_block(names, next_name, f):
for depth, func_name in enumerate(names):
f.write("\n" + " " * depth + "def %s():" % func_name)
f.write("\n" + " " * (depth + 1) + "%s()" % next_name)
for depth, func_name in reversed(list(enumerate(names[1:]))):
f.write("\n" + " " * (depth + 1) + "%s()" % func_name)
f.write("\n") # for readability ;)
@akaptur
akaptur / gist:d8348c21e93d61ec9397
Created September 29, 2014 19:12
recursion limit checker
# 2.7
if (tstate->recursion_depth > recursion_limit) {
--tstate->recursion_depth;
PyErr_Format(PyExc_RuntimeError,
"maximum recursion depth exceeded%s",
where);
return -1;
# 3.4
@akaptur
akaptur / gist:be988fc5cc3ff41f66c3
Created September 29, 2014 19:17
full recursion limit checker
int
_Py_CheckRecursiveCall(char *where)
{
PyThreadState *tstate = PyThreadState_GET();
#ifdef USE_STACKCHECK
if (PyOS_CheckStack()) {
--tstate->recursion_depth;
PyErr_SetString(PyExc_MemoryError, "Stack overflow");
return -1;
@akaptur
akaptur / frame_counter.py
Created September 29, 2014 19:21
frame counter
def depth_one(n):
def depth_two(n):
def countdown(n, times_called=[0]):
times_called[0] += 1
if n == 0:
return times_called
else:
try:
return countdown(n-1)
except RuntimeError:
test ⚲ ./testopt
aflag = 0, bflag = 0, cvalue = (null)
test ⚲ ./testopt -a -b
aflag = 1, bflag = 1, cvalue = (null)
test ⚲ ./testopt -c
Option -c requires an argument.
test ⚲ ./testopt -ab
aflag = 1, bflag = 1, cvalue = (null)
test ⚲ ./testopt -c foo
aflag = 0, bflag = 0, cvalue = foo
def countdown(n, times_called=[0]):
print times_called[0], " ", n, " "
times_called[0] += 1
if n == 1:
return times_called
else:
try:
return countdown(n-1)
except RuntimeError:
def countdown(n, times_called=[0],):
print(times_called[0], " ", n, " ")
# print "frame: %s" % id(inspect.currentframe())
times_called[0] += 1
if n == 1:
return times_called
else:
try:
return countdown(n-1)
except RuntimeError: