除了_func_之外还有其他办法输出当前执行的函数名称吗
时间: 2023-08-03 20:04:30 浏览: 37
可以使用inspect模块中的getframeinfo方法来获取当前函数的信息,包括函数名、行号等。示例如下:
```python
import inspect
def foo():
print(inspect.getframeinfo(inspect.currentframe()).function)
foo() # 输出:foo
```
需要注意的是,这种方法只能获取当前函数的信息,不能获取调用该函数的函数名称。如果需要获取调用该函数的函数名称,可以使用 traceback 模块获取调用栈信息,示例如下:
```python
import traceback
def foo():
print(traceback.extract_stack(None, 2)[0][2])
def bar():
foo()
bar() # 输出:bar
```
这里 `traceback.extract_stack(None, 2)[0][2]` 中 `extract_stack` 获取当前调用栈信息,`None` 表示获取完整的栈信息,`2` 表示忽略最后两个栈帧(即忽略 `bar()` 和 `foo()`),然后 `traceback.extract_stack(None, 2)[0]` 返回当前栈帧信息,其中 `[2]` 表示获取函数名称。
相关问题
math_func函数
引用\[1\]中提到,函数表达式可以是匿名函数,也可以是有名函数。匿名函数没有函数名,而有名函数有一个函数名。例如,在给定的代码中,num1是一个有名函数,而num2是一个匿名函数。\[1\]
引用\[2\]中提到,函数表达式中的函数提升。在给定的代码中,虽然函数表达式var func = function sum(a,b){}在前面被提升,但是函数的实际声明在后面。因此,在console.log(sum(10,10))中调用sum函数会报错,因为函数还没有被声明。\[2\]
引用\[3\]中提到,函数可以写多个return语句,但是只有一个return语句会被执行。在给定的代码中,函数func接受两个参数并返回它们的和。函数func也可以作为参数传递给其他函数。例如,func(func(10,20),30)将返回60,因为它首先计算func(10,20)的结果为30,然后将30作为参数传递给func函数,最终返回60。\[3\]
根据以上引用内容,math_func函数的具体定义和用途没有提及。如果你能提供更多关于math_func函数的信息,我将能够为你提供更准确的答案。
#### 引用[.reference_title]
- *1* *2* *3* [function 函数](https://blog.csdn.net/weixin_46376652/article/details/123998882)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^koosearch_v1,239^v3^insert_chatgpt"}} ] [.reference_item]
[ .reference_list ]
__func__和__FUNCTION__有区别吗
`__func__` 和 `__FUNCTION__` 表示的都是当前函数的名称,但是它们的用法和作用域有所不同。
`__func__` 是 C99 标准中新增加的一个预定义宏,它表示当前函数的名称,类型为 const char[],只能在函数内部使用。例如:
```c
void func() {
printf("%s\n", __func__);
}
```
`__FUNCTION__` 是 GCC 特有的预定义宏,它也表示当前函数的名称,类型为 const char[],可以在函数内部和外部使用。例如:
```c
void func() {
printf("%s\n", __FUNCTION__);
}
int main() {
printf("%s\n", __FUNCTION__);
func();
return 0;
}
```
需要注意的是,`__func__` 只能在 C99 及以上版本的编译器中使用,而 `__FUNCTION__` 可以在 GCC 编译器中使用。