python如何获取当前函数的名字_python获取当前函数名称的方法

尼克
发布: 2025-09-11 16:19:01
原创
448人浏览过
获取当前函数名称的方法有多种:最简单的是使用__name__属性,适用于普通函数和方法;在装饰器中应使用functools.wraps保留原函数名;需获取调用栈信息时可用sys._getframe()或inspect.currentframe();inspect模块功能更强大但性能开销略高;多线程环境下推荐通过参数传递函数名或使用inspect确保安全。

python如何获取当前函数的名字_python获取当前函数名称的方法

想知道Python里当前运行的函数叫啥?其实方法挺多的,而且不同场景可能适合不同的方案。最简单的,直接用

__name__
登录后复制
属性就能搞定,但有时候可能需要更高级的技巧,比如在装饰器里获取。

获取当前函数名称的方法:

  1. 直接使用

    __name__
    登录后复制
    属性: 这是最简单直接的方法,在函数内部使用
    __name__
    登录后复制
    会返回函数的名字。

    def my_function():
        print(f"当前函数的名字是: {my_function.__name__}")
    
    my_function() # 输出: 当前函数的名字是: my_function
    登录后复制
  2. 使用

    sys._getframe()
    登录后复制
    这种方法可以获取调用栈的信息,从而拿到函数名。它稍微复杂一点,但更灵活。

    立即学习Python免费学习笔记(深入)”;

    import sys
    
    def another_function():
        frame = sys._getframe()
        print(f"当前函数的名字是: {frame.f_code.co_name}")
    
    another_function() # 输出: 当前函数的名字是: another_function
    登录后复制
  3. 在装饰器里获取函数名: 装饰器场景下,直接用

    __name__
    登录后复制
    可能会拿到装饰器的名字,而不是被装饰的函数。这时可以用
    functools.wraps
    登录后复制
    来保留原始函数的信息。

    import functools
    
    def my_decorator(func):
        @functools.wraps(func)
        def wrapper(*args, **kwargs):
            print(f"被装饰的函数名字是: {func.__name__}")
            return func(*args, **kwargs)
        return wrapper
    
    @my_decorator
    def yet_another_function():
        pass
    
    yet_another_function() # 输出: 被装饰的函数名字是: yet_another_function
    登录后复制
  4. 使用

    inspect
    登录后复制
    模块:
    inspect
    登录后复制
    模块提供了更强大的introspection能力,可以用来获取各种代码对象的信息。

    NameGPT名称生成器
    NameGPT名称生成器

    免费AI公司名称生成器,AI在线生成企业名称,注册公司名称起名大全。

    NameGPT名称生成器 0
    查看详情 NameGPT名称生成器
    import inspect
    
    def some_function():
        print(f"当前函数的名字是: {inspect.currentframe().f_code.co_name}")
    
    some_function() # 输出: 当前函数的名字是: some_function
    登录后复制

如何在类的方法中获取函数名?

在类的方法中获取函数名和在普通函数中类似,但需要注意

self
登录后复制
参数。

class MyClass:
    def my_method(self):
        print(f"当前方法的名字是: {self.my_method.__name__}") # 或者直接用 MyClass.my_method.__name__

instance = MyClass()
instance.my_method() # 输出: 当前方法的名字是: my_method
登录后复制

或者,使用

inspect
登录后复制
模块:

import inspect

class AnotherClass:
    def another_method(self):
        print(f"当前方法的名字是: {inspect.currentframe().f_code.co_name}")

instance = AnotherClass()
instance.another_method() # 输出: 当前方法的名字是: another_method
登录后复制

__name__
登录后复制
inspect
登录后复制
模块,哪个更适合?

__name__
登录后复制
属性最简单直接,适合大多数情况。但如果需要更复杂的introspection,比如获取调用栈信息、函数签名等,
inspect
登录后复制
模块会更强大。
inspect
登录后复制
模块功能更全,但也会带来一些性能开销,所以在对性能有要求的场景下,需要权衡一下。

如何在多线程环境下安全地获取函数名?

多线程环境下,

sys._getframe()
登录后复制
可能不是线程安全的。更安全的方法是使用
inspect
登录后复制
模块或者直接传递函数名。

import threading
import inspect

def worker(func_name):
    print(f"线程中运行的函数名: {func_name}")

def my_threaded_function():
    thread = threading.Thread(target=worker, args=(inspect.currentframe().f_code.co_name,))
    thread.start()

my_threaded_function() # 输出: 线程中运行的函数名: my_threaded_function
登录后复制

或者,直接传递函数对象,然后在线程里使用

__name__
登录后复制

import threading

def worker(func):
    print(f"线程中运行的函数名: {func.__name__}")

def my_threaded_function():
    thread = threading.Thread(target=worker, args=(my_threaded_function,))
    thread.start()

my_threaded_function() # 输出: 线程中运行的函数名: my_threaded_function
登录后复制

以上就是python如何获取当前函数的名字_python获取当前函数名称的方法的详细内容,更多请关注php中文网其它相关文章!

python速学教程(入门到精通)
python速学教程(入门到精通)

python怎么学习?python怎么入门?python在哪学?python怎么学才快?不用担心,这里为大家提供了python速学教程(入门到精通),有需要的小伙伴保存下载就能学习啦!

下载
来源:php中文网
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
最新问题
开源免费商场系统广告
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板
关于我们 免责申明 意见反馈 讲师合作 广告合作 最新更新 English
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送
PHP中文网APP
随时随地碎片化学习

Copyright 2014-2025 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号