inspect模块小技巧

一、如何在运行时获取文件路径

#-*- coding:utf-8 -*-
import os
import inspect
#获取当前frame对象
current_frame = inspect.stack()[0][0]
try:
	#文件名
	filename = inspect.getfile(current_frame)
	filepath = os.path.abspath(filename)
	print filepath
except Exception, e:
	raise e
finally:
	#删除reference cycles,避免内存浪费
	del current_frame

二、如何实现主函数装饰器

#-*-encoding:utf-8-*-#
"""
main_decorator.py
"""
import sys
import inspect

def main(fn):
    """
    装饰器,用来标识模块的主函数。
    @main
    def mymain_function():
        # function body
    
    该函数用来取代 if __name__ == '__main__' 语句。
    """
    caller_frame = inspect.stack()[1][0]
    try:
        if caller_frame.f_locals['__name__'] == '__main__':
            args = sys.argv[1:]
            fn(*args)
    except Exception, e:
        raise e
    finally:
        del caller_frame

#-*- encoding:utf-8 -*-
from main_decorator import main

@main
def hello_main_decorator():
	print 'hello main decorator!'

三、inspect模块备忘

  inspect模块能够在运行时获取对象(live objects)的信息。该模块主要提供四种类型的服务——类型核对、源代码获取、检阅类和函数以及检查解析器栈信息,它对获取运行时信息提供了很好的支持。


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值