python 动态获取当前运行的类名和函数名的方法


Posted in Python onApril 15, 2014

一、使用内置方法和修饰器方法获取类名、函数名

python中获取函数名的情况分为内部、外部,从外部的情况好获取,使用指向函数的对象,然后用__name__属性

def a():pass
a.__name__

除此之外还可以:
getattr(a,'__name__')

尽管有些脱裤子放屁,总之,从外部获取的方法是非常灵活的。

有些同学需要从函数内部获取函数本身的名字,就需要用些技巧了。
1.使用sys模块的方法:

def a():
print sys._getframe().f_code.co_name

f_code和co_name可以参考python源码解析的pyc生成和命名空间章节。
2.使用修饰器的方法:
使用修饰器就可以对函数指向一个变量,然后取变量对象的__name__方法。
def timeit(func):
def run(*argv):
   print func.__name__
   if argv:
    ret = func(*argv)
   else:
    ret = func()
   return ret
return run
@timeit
def t(a):
print a 
t(1)

二、使用inspect模块动态获取当前运行的函数名

import inspect
def get_current_function_name():
    return inspect.stack()[1][3]
class MyClass:
    def function_one(self):
        print "%s.%s invoked"%(self.__class__.__name__, get_current_function_name())
if __name__ == "__main__":
    myclass = MyClass()
    myclass.function_one()

动态获取当前运行的函数名很方便,特别是对于一些debug系统来说
Python 相关文章推荐
python定时采集摄像头图像上传ftp服务器功能实现
Dec 23 Python
python打开文件并获取文件相关属性的方法
Apr 23 Python
对Python中gensim库word2vec的使用详解
May 08 Python
使用python爬取B站千万级数据
Jun 08 Python
python使用__slots__让你的代码更加节省内存
Sep 05 Python
python读取图片任意范围区域
Jan 23 Python
浅谈python的输入输出,注释,基本数据类型
Apr 02 Python
对Python中画图时候的线类型详解
Jul 07 Python
python网络编程之多线程同时接受和发送
Sep 03 Python
Python如何基于smtplib发不同格式的邮件
Dec 30 Python
python实现梯度下降算法的实例详解
Aug 17 Python
Python如何使用循环结构和分支结构
Apr 13 Python
python使用百度翻译进行中翻英示例
Apr 14 #Python
python使用xauth方式登录饭否网然后发消息
Apr 11 #Python
python判断、获取一张图片主色调的2个实例
Apr 10 #Python
Python使用新浪微博API发送微博的例子
Apr 10 #Python
一个检测OpenSSL心脏出血漏洞的Python脚本分享
Apr 10 #Python
Python删除指定目录下过期文件的2个脚本分享
Apr 10 #Python
python实现随机密码字典生成器示例
Apr 09 #Python
You might like
php二维数组合并及去重复的方法
2015/03/04 PHP
[原创]php逐行读取txt文件写入数组的方法
2015/07/02 PHP
php的api数据接口书写实例(推荐)
2016/09/22 PHP
PHP实现对xml进行简单的增删改查(CRUD)操作示例
2017/05/19 PHP
Apache站点配置SSL强制跳转443
2021/03/09 Servers
动态创建的表格单元格中的事件实现代码
2008/12/30 Javascript
最短的IE判断var ie=!-[1,]分析
2014/05/28 Javascript
基于jquery实现的鼠标悬停提示案例
2016/12/11 Javascript
详谈javascript精度问题与调整
2017/07/08 Javascript
webpack分离css单独打包的方法
2018/06/12 Javascript
jQuery实现ajax的嵌套请求案例分析
2019/02/16 jQuery
js/jQuery实现全选效果
2019/06/17 jQuery
layerui代码控制tab选项卡,添加,关闭的实例
2019/09/04 Javascript
vue设置一开始进入的页面教程
2019/10/28 Javascript
基于leaflet.js实现修改地图主题样式的流程分析
2020/05/15 Javascript
解决vue单页面多个组件嵌套监听浏览器窗口变化问题
2020/07/30 Javascript
vue 项目引入echarts 添加点击事件操作
2020/09/09 Javascript
Python选择排序、冒泡排序、合并排序代码实例
2015/04/10 Python
Python使用迭代器打印螺旋矩阵的思路及代码示例
2016/07/02 Python
Python绘制的二项分布概率图示例
2018/08/22 Python
Python线程同步的实现代码
2018/10/03 Python
如何使用Python破解ZIP或RAR压缩文件密码
2020/01/09 Python
Pytorch GPU显存充足却显示out of memory的解决方式
2020/01/13 Python
Python 必须了解的5种高级特征
2020/09/10 Python
利用python爬取有道词典的方法
2020/12/08 Python
matplotlib对象拾取事件处理的实现
2021/01/14 Python
CSS中的字体大小设置属性总结
2016/05/24 HTML / CSS
红领巾广播站广播稿
2014/02/01 职场文书
《路旁的橡树》教学反思
2014/04/07 职场文书
佛光寺导游词
2015/02/10 职场文书
python中Tkinter 窗口之输入框和文本框的实现
2021/04/12 Python
如何在Mac上通过docker配置PHP开发环境
2021/05/29 PHP
nginx配置虚拟主机的详细步骤
2021/07/21 Servers
django中websocket的具体使用
2022/01/22 Python
Java Spring Boot请求方式与请求映射过程分析
2022/06/25 Java/Android
Rust中的Struct使用示例详解
2022/08/14 Javascript