structshape模块
"""This module contains a code example related to
Think Python, 2nd Edition
by Allen Downey
http://thinkpython2.com
Copyright 2015 Allen Downey
License: http://creativecommons.org/licenses/by/4.0/
"""
from __future__ import print_function, division
"""
This module provides one function, structshape(), which takes
an object of any type and returns a string that summarizes the
"shape" of the data structure; that is, the type, size and
composition.
"""
def structshape(ds):
"""Returns a string that describes the shape of a data structure.
ds: any Python object
Returns: string
"""
typename = type(ds).__name__
# handle sequences
sequence = (list, tuple, set, type(iter('')))
if isinstance(ds, sequence):
t = []
for i, x in enumerate(ds):
t.append(structshape(x))
rep = '%s of %s' % (typename, listrep(t))
return rep
# handle dictionaries
elif isinstance(ds, dict):
keys = set()
vals = set()
for k, v in ds.items():
keys.add(structshape(k))
vals.add(structshape(v))
rep = '%s of %d %s->%s' % (typename, len(ds),
setrep(keys), setrep(vals))
return rep
# handle other types
else:
if hasattr(ds, '__class__'):
return ds.__class__.__name__
else:
return typename
def listrep(t):
"""Returns a string representation of a list of type strings.
t: list of strings
Returns: string
"""
current = t[0]
count = 0
res = []
for x in t:
if x == current:
count += 1
else:
append(res, current, count)
current = x
count = 1
append(res, current, count)
return setrep(res)
def setrep(s):
"""Returns a string representation of a set of type strings.
s: set of strings
Returns: string
"""
rep = ', '.join(s)
if len(s) == 1:
return rep
else:
return '(' + rep + ')'
return
def append(res, typestr, count):
"""Adds a new element to a list of type strings.
Modifies res.
res: list of type strings
typestr: the new type string
count: how many of the new type there are
Returns: None
"""
if count == 1:
rep = typestr
else:
rep = '%d %s' % (count, typestr)
res.append(rep)
if __name__ == '__main__':
t = [1, 2, 3]
print(structshape(t))
t2 = [[1, 2], [3, 4], [5, 6]]
print(structshape(t2))
t3 = [1, 2, 3, 4.0, '5', '6', [7], [8], 9]
print(structshape(t3))
class Point:
"""trivial object type"""
t4 = [Point(), Point()]
print(structshape(t4))
s = set('abc')
print(structshape(s))
lt = zip(t, s)
print(structshape(lt))
d = dict(lt)
print(structshape(d))
it = iter('abc')
print(structshape(it))
导入模块结果展示
from structshape import structshape
t = [1,2,3]
structshape(t)
'list of 3 int'
t2 = [[1,2], [3,4], [5,6]]
structshape(t2)
'list of 3 list of 2 int'
t3 = [1, 2, 3, 4.0, '5', '6', [7], [8], [9]]
structshape(t3)
'list of (3 int, float, 2 str, 3 list of int)'
s = 'abc'
lt = list(zip(t,s))
structshape(lt)
'list of 3 tuple of (int, str)'
d = dict(lt)
structshape(d)
'dict of 3 int->str'