python 获取函数名字的办法

本文介绍了在Python中从函数内外获取函数名称的不同方法,包括使用sys模块、装饰器及inspect模块等技术。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

本博客转自 https://www.zybuluo.com/spiritnotes/note/306113

在程序处理中,有时候需要出现获取函数名字,这时有可能在函数内部,也有可能在函数外部,不同的情况下应该如何获取呢?

函数外部

在函数外部比较简单,直接采用__name__即可

def fun_name():
    pass
z = fun_name
print(z.__name__)
print(getattr(z,'__name__'))

函数内部

而在函数内部就需要复杂一点了,有如下方法:

通过sys._getframe().f_code.co_name获取

 
def fun_name():
    import sys
    print(sys._getframe().f_code.co_name)
z = fun_name
z()

通过装饰器将名字作为参数传入函数

 
def dec_name(f):
    name = f.__name__
    def new_f(*a, **ka):
        return f(*a, __name__ = name, **ka)
    return new_f
@dec_name
def fun_name(x, __name__):
    print(__name__)
z = fun_name
z(1)

通过inspect获取名字

 
import inspect
def fun_name():
    print(inspect.stack()[0][3])
z = fun_name
z()

测试

代码: https://github.com/spiritwiki/codes/tree/master/LearnPython

函数外边获得函数的名字
fun_name
fun_name
函数内部通过sys._getframe().f_code.co_name获得名字
fun_name
通过装饰器将名字作为参数传入函数
fun_name
通过inspect获取名字
fun_name

 

Python 中,函数是一段可以重复使用的代码块,用于执行某个特定的任务。定义和调用函数是非常基础的操作之一。 --- ### **Python 定义函数** 要定义一个函数,需要使用 `def` 关键字,其基本结构包括以下几个部分: 1. 函数名称。 2. 参数列表(可选)。 3. 冒号后跟随缩进表示的函数体。 4. 返回值可通过 `return` 语句指定(也可省略,默认返回 None)。 #### 基本语法: ```python def 函数名(参数1, 参数2, ...): """文档字符串""" # 可选项,描述函数功能 函数体... return 结果 # 如果不需要返回值,则可以忽略此行 ``` **示例 1:无参函数** ```python def greet(): print("Hello, world!") greet() # 调用函数,输出 "Hello, world!" ``` --- ### **Python 调用函数** 一旦定义好了函数,就可以直接通过它的名字加上圆括号来进行调用了。如果有参数的话,则需将相应的实参传入其中。 #### 示例 2:带参数的函数 ```python def add(a, b): # 定义接受两个参数的add函数 result = a + b return result # 调用并打印结果 print(add(3, 5)) # 输出8 ``` 在这个例子中,我们创建了一个名为 'add' 的简单算术加法操作,并且能够成功获取两数相加之总合作为最终反馈信息呈现出来。 另外还有默认参数、关键字参数等更高级别的设定可用于适应更多场景需求。 例如: - 默认参数允许某些输入如果未提供具体值得时候采用预先设置好的初始状态。 ```python def power(base, exponent=2): # 若只传递base,则自动平方;若给出exponent,则按次方计算。 return base ** exponent print(power(3)) # 输出9 (因为指数缺省设为了2) print(power(2, 3)) # 输出8 显示正常立方效果 ``` 关键词参数可以让用户按照任意顺序命名发送数据过去而不必担心位置匹配错误风险存在与否的问题解决办法所在之处。 --- ### **匿名 Lambda 表达式** 对于一些小型、临时性的用途来说还可以考虑利用 lambda 创建简洁版内联型的小型功能性组件出来快速解决问题方便快捷不少呢! 比如排序的时候自定义比较规则: ```python sorted_list = sorted([(1,'b'), (2,'a')], key=lambda x:x[1]) ``` 以上就是关于怎样去构建以及激活运行属于您自己的个人化定制版本程序单元内容介绍了哦~ ---
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值