Python打印长度或一次获取多个变量的大小
在Python中,如果我Python打印长度或一次获取多个变量的大小,python,class,python-2.7,printing,size,Python,Class,Python 2.7,Printing,Size,在Python中,如果我print以逗号分隔的不同数据类型,它们都将根据它们的\uuuu str\uuuu(或者可能是\uuu repr\uuuu)方法进行操作,并为我打印出一个漂亮的字符串 我有一堆变量,比如下面的data1,data2…,我很想得到它们的大致大小。我知道: 并非所有变量都有一个有用的sys.getsizeof(我想知道存储的大小,而不是容器的大小。)-多亏了Martijn Pieters 对于我来说,每个打印变量的长度是一个足够好的大小估计 我希望避免单独处理不同的数据类
print
以逗号分隔的不同数据类型,它们都将根据它们的\uuuu str\uuuu
(或者可能是\uuu repr\uuuu
)方法进行操作,并为我打印出一个漂亮的字符串
我有一堆变量,比如下面的data1,data2…
,我很想得到它们的大致大小。我知道:
- 并非所有变量都有一个有用的
(我想知道存储的大小,而不是容器的大小。)-多亏了Martijn Pieterssys.getsizeof
- 对于我来说,每个打印变量的长度是一个足够好的大小估计
print
这样的函数来获取数据的总长度?我发现像这样的东西不太可能还没有内置到Python中
>>> obj.data1 = [1, 2, 3, 4, 5]
>>> obj.data2 = {'a': 1, 'b':2, 'c':3}
>>> obj.data3 = u'have you seen my crossbow?'
>>> obj.data4 = 'trapped on the surface of a sphere'
>>> obj.data5 = 42
>>> obj.data6 = <fake a.b instance at 0x88888>
>>> print obj.data1, obj.data2, obj.data3, obj.data4, obj.data5, obj.data6
[1, 2, 3, 4, 5] {'a': 1, 'c': 3, 'b': 2} have you seen my crossbow? trapped on the surface of a sphere 42 meh
我知道你们中的大多数人都可以写这样的东西,但我主要是问Python是否有任何内置的方法来完成它。一个很好的解决方案将向我展示一种方法,可以返回在Python2.7中打印的字符串。(类似于PHP中的print\r
,否则我会觉得它完全不如Python。)我计划通过编程方式使用许多具有预填充变量的对象来实现这一点,因此不会写入临时文件或类似的内容
谢谢
作为旁注,这个问题源于需要计算由未知数据构造的类中变量的近似总大小。如果您有办法获得类中不可调用项的总大小(老实说,总大小也会起作用),那么该解决方案会更好。我没有把这作为我的主要问题,因为在我看来Python不支持这样的东西。如果有,万岁 首先,sys.getsizeof()
不是用来确定打印大小的方法。python对象内存占用对于将python对象表示为字符串所需的字符数来说是一个很差的指标
您正在寻找len()
。使用一个简单的生成器表达式加上sum()
可以得到一个总数:
def printlen(*args):
if not args:
return 0
return sum(len(str(arg)) for arg in args) + len(args) - 1
表达式之间的逗号告诉print
打印一个空格,因此print
将写入stdout
的总长度是所有字符串表示的总长度加上元素之间的空格
我假设您也不想包括换行print
写入
演示:
首先,sys.getsizeof()
不是用来确定打印大小的方法。python对象内存占用对于将python对象表示为字符串所需的字符数来说是一个很差的指标
您正在寻找len()
。使用一个简单的生成器表达式加上sum()
可以得到一个总数:
def printlen(*args):
if not args:
return 0
return sum(len(str(arg)) for arg in args) + len(args) - 1
表达式之间的逗号告诉print
打印一个空格,因此print
将写入stdout
的总长度是所有字符串表示的总长度加上元素之间的空格
我假设您也不想包括换行print
写入
演示:
现在应该可以正确地执行此操作:
def printlen(*args):
return sum(map(len, map(str, args)))
对于不支持str(obj)
功能的对象。您可以用自制函数或lambda替换str
:
def printlen(*args):
return sum(map(len, map(lambda x: str(x) if hasattr(x, '__str__') else '', args)))
现在应该可以正确地执行此操作:
def printlen(*args):
return sum(map(len, map(str, args)))
对于不支持str(obj)
功能的对象。您可以用自制函数或lambda替换str
:
def printlen(*args):
return sum(map(len, map(lambda x: str(x) if hasattr(x, '__str__') else '', args)))
如果需要长度,可以使用以下选项:
printlen = lambda *x: print(sum(len(str(i)) for i in x))
用法:
printlen(obj1, obj2, ..)
如果需要长度,可以使用以下选项:
printlen = lambda *x: print(sum(len(str(i)) for i in x))
用法:
printlen(obj1, obj2, ..)
如果你有一个对象结构,你想知道它需要多少来存储它,你也可以pickle
/cpickle
对象并使用该数字作为度量,还可以将数据存储到数据库中。如果你有一个对象结构,你想知道它需要多少来存储它,您还可以pickle
/cpickle
对象,并使用该数字作为度量,还可以将数据存储到数据库中。“一个很好的解决方案将向我展示一种返回Python 2.7中打印的字符串的方法。”
这大致就是print
打印的内容(可能是多余的空格,缺少最后的换行符):
如果您遇到大量无法使用str
的对象,请改用safe\u str
:
def safer_str(obj):
return str(obj) if hasattr(obj,"__str__") else repr(obj)
“一个很好的解决方案将向我展示一种返回Python 2.7中打印的字符串的方法。”
这大致就是print
打印的内容(可能是多余的空格,缺少最后的换行符):
如果您遇到大量无法使用str
的对象,请改用safe\u str
:
def safer_str(obj):
return str(obj) if hasattr(obj,"__str__") else repr(obj)
探查器会更有用吗?@doctorlove可能会,但这实际上只是一个中间步骤,看看我的平均对象是否足够小,我能负担得起将它们全部移动到数据库中。如果有一个类方法能给我提供大致的大小,那就太好了。探查器会更有用吗?@doctorlove,但这实际上只是一个中间步骤,看看我的平均对象是否足够小,我能负担得起将它们全部移动到数据库中。如果有一个类方法能给我一个大致的大小,那就太好了。我知道sys.getsizeof并不代表所需的字符数。如果证明可行,我计划将这些数据移动到数据库中,因此我只想以某种可测量的方式知道许多对象的大致大小,无论是打印长度还是内存占用。空间将是可忽略的。(我假设Python的足迹是合理的)。使用的问题