4.16 Python 开发技巧集合

4.16.1 如何在被调用方法中获取调用者的方法名?

Python:如何在被调用方法中获取调用者的方法名?

假设我有2种方法:

def method1(self):
    ...
    a = A.method2()

def method2(self):
    ...

如果我不想对method1做任何更改,如何在method2中获取调用者的名称(在此示例中,名称为method1)?

inspect.getframeinfo

等相关功能检查可以帮助:

>>> import inspect
>>> def f1(): f2()
...
>>> def f2():
...   curframe = inspect.currentframe()
...   calframe = inspect.getouterframes(curframe, 2)
...   print 'caller name:', calframe[1][3]
...
>>> f1()
caller name: f1
>>>

这种内省旨在帮助调试和开发;为了生产功能的目的,不建议依赖它。

4.16.2 pprint

比如说这段

>>> a
{'version': 1, 'config': [{'subnets': [{u'routes': [{u'netmask': u'0.0.0.0', u'network': u'0.0.0.0', u'gateway': u'172.20.22.200'}], u'netmask': u'255.255.255.0', u'type': 'static', 'ipv4': True, 'address': u'172.20.22.182'}], u'mtu': 1500, u'type': 'physical', 'name': 'eth0', 'mac_address': u'fa:16:3e:29:27:c6'}, {u'type': 'nameserver', u'address': u'114.114.114.114'}, {u'type': 'nameserver', u'address': u'8.8.8.8'}]}

可以使用pprint

>>> import pprint
>>> pprint.pprint(a)
{'config': [{'mac_address': u'fa:16:3e:29:27:c6',
             u'mtu': 1500,
             'name': 'eth0',
             'subnets': [{'address': u'172.20.22.182',
                          'ipv4': True,
                          u'netmask': u'255.255.255.0',
                          u'routes': [{u'gateway': u'172.20.22.200',
                                       u'netmask': u'0.0.0.0',
                                       u'network': u'0.0.0.0'}],
                          u'type': 'static'}],
             u'type': 'physical'},
            {u'address': u'114.114.114.114', u'type': 'nameserver'},
            {u'address': u'8.8.8.8', u'type': 'nameserver'}],
 'version': 1}

关注公众号,获取最新干货!