在Python3中,print
是一个函数。在Python2.7中,print
是一个声明,但如果您在脚本的顶部声明from __future__ import print_function
,则print
将成为函数。有可能重新定义功能:
from __future__ import print_function
import pandas as pd
try: import builtins
except ImportError: import __builtin__ as builtins
def print(*args, **kwargs):
args = [item if not isinstance(item, (dict,)) else pd.Series(item)
for item in args]
builtins.print(*args, **kwargs)
print({'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'})
print(2,3,4, sep=' -- ')
产生
cheese stilton
ride coconuts
swallow african
dtype: object
2 -- 3 -- 4
顺便说一句,dict
是defined in C。特别是其__repr__
是defined in C。当__str__
method is empty,__repr__
默认情况下用于生成对象的字符串表示形式。
C-定义的对象的特殊方法,如__str__
或__repr__
不能monkeypatched:
dct = {'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'}
def mystr(self):
return str(pd.Series(self))
dct.__str__ = mystr
引发
AttributeError: 'dict' object attribute '__str__' is read-only
如果dct
是一个Python定义的类的一个实例,那么故事会有所不同。这些类的特殊方法可以被定义,覆盖或monkeypatched:
import pandas as pd
class MyDict(dict):
def __str__(self):
return str(pd.Series(self))
dct = {'cheese':'stilton', 'swallow':'african', 'ride':'coconuts'}
mydct = MyDict(dct)
print(mydct)
产生
cheese stilton
ride coconuts
swallow african
dtype: object
而是利用这需要所有类型的字典更改为MyDicts。这比重新定义print
函数要困难得多。
(顺便说一句,当心有hidden pitfalls to subclassing dict
properly。例如,如果你重新定义__setitem__
但不update
,然后update
不会叫你__setitem__
方法。)
我不跟这些东西,所以我有经验只是将其作为评论发布:据我所知,您正在寻找'__str__'方法。如果你定义了一个从dict继承的新类,你可以将它的'__str__'方法改为'def __str __(self):return pd.Series(self).__ str __()'虽然可能没有必要将它转换为Series 。也许查找方法和修改字典可能会更有效。 – ayhan
你说得对,那是正确的方法。不过,我不知道如何修改或替换它。在你定义之后,我尝试了'dict .__ str__ = __str__',但显然我不能设置字典类型的属性。我也不确定你的意思是从字典继承的新类。 – TomCho
请尝试[此答案](http://stackoverflow.com/a/10493071/5276797)。 – IanS