Python如何获取到当前函数名和通过字符串调用函数
2018-01-19 16:11
477 查看
获取当前函数名:
应用环境: 某些时候, 为了简化和更好扩展程序,我们需要获取到当前运行的函数名字方法1(不推荐)
import sys def I_want_to_know_my_name(): print(sys._getframe().f_code.co_name) #你懂得,下划线开头的不应该使用的
方法2
import traceback def who_am_i(): return traceback.extract_stack()[-2][2] def I_want_to_know_my_name(): print(who_am_i())
方法3
import inspect def who_am_i2(): return inspect.stack()[1][3] def I_want_to_know_my_name(): print(who_am_i2())
通过字符串调用函数
通过反射或者exec/eval来调用, 下面有类和函数的例子类:
class foo(object): def load(self): f = getattr(self, "load_json") f() def load_json(self): print("This is load_json module") myfunc = foo() myfunc.load()
函数(反射):
# 单模块情况下, 多模块就import module1, 然后getattr(module1....) import sys def bar(): print("This is bar") def foo(): print("This is foo") def check_str(stra): mod = sys.modules[__name__] #获取当前模块对象 if hasattr(mod, stra): getattr(mod, stra)() else: print("No this module") check_str("bar") #你可能会问如果输入check_str会怎么样, 我会告诉你缺少变量并报错,不过最好还是在上面函数加判断避免这种情况出现
函数(exec/eval):
def bar(): print("This is bar") def foo(stra): try: exec(stra) # 如果需要return 值, 则一定要用eval except: print("No this module") foo("bar()")
结合一起用的例子
假设对外提供一个load的函数, 通过一系列的判断, 我获取到一个ext_module_name的值, 通过这个值和"load", 我各种low 错了,是load. 如果以后需要扩展xml, gson, yaml等等, 只有写上对应的###_load就可以了, 不用修改load, 这样可以满足开闭原则import traceback ext_module_name = "_pickle_" #假设这个变量是之前一系列过程得到的结果 def who_am_i(): return traceback.extract_stack()[-2][2] def _json_load(): return "json load" def _pickle_load(): return "pickle load" def load(): my_name = who_am_i() try: return eval("%s%s()" % (ext_module_name, my_name)) except Exception as e: raise e print(load())
相关文章推荐
- Python 中如何获取当前位置所在的文件名,函数名,以及行号
- [Python]通过函数名字符串调用函数
- [Python]通过函数名字符串调用函数
- 运行时如何获取运行当前代码所在的函数,一个神奇的宏
- php如何通过字符串获取域名URL地址
- 如何通过GPS获取我当前所在的城市或街道
- FW:在python中获取当前位置所在的行号和函数名
- C++如何获取当前时间并转换成相应的格式字符串.
- 如何通过GPS获取我当前所在的城市或街道
- wp7中如何通过代码获取当前手机的国家代码
- 通过Python的内置字符串处理函数来处理字符串的方法和整理
- Python如何获取系统当前时间
- 如何得到python的当前函数名及行号
- python获取当前位置所在的行号和函数名
- 如何获取指定内存所在的模块、当前模块、当前函数的返回模块 - Yonsm.NET - SHARE YONSM'S IDEAS
- C下如何通过scanf()函数获取正确的数据
- Python脚本如何获取当前环节和用户等信息
- python 获取当前位置所在的函数名和行号
- 忆龙2009:C# 如何取得取得实例类名称的字符串表示 、当前运行的函数的名称
- python读配置文件;正则表达式替换、切割字符串;获取当前时间