Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/python/310.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python:some"__魔术;属性从该函数中引用函数_Python_Python 3.x - Fatal编程技术网

Python:some"__魔术;属性从该函数中引用函数

Python:some"__魔术;属性从该函数中引用函数,python,python-3.x,Python,Python 3.x,Python中是否有类似PHP的\uuuu函数\uuuuu魔法常量 def func(x): print(__FUNCTION__) ## <function func at 0x00B02810> print(__FUNCTION__.__name__) ## func def func(x): 打印(函数) 打印(_函数_._名称_)##函数 UPD: 举个例子: import sys def func(f = "Foo"): b = "Bar"

Python中是否有类似PHP的
\uuuu函数\uuuuu
魔法常量

def func(x):
    print(__FUNCTION__)  ## <function func at 0x00B02810>
    print(__FUNCTION__.__name__)  ## func
def func(x):
打印(函数)
打印(_函数_._名称_)##函数
UPD:

举个例子:

import sys

def func(f = "Foo"):
    b = "Bar"
    print(sys._getframe().f_code) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>
    print(func.__code__) ## <code object func at 0x00B09A20, file "C:\py\func.py", line 5>, the same

    print(sys._getframe().f_trace) ## None
    print(sys._getframe().f_locals) ## {'b': 'Bar', 'f': 'Foo'}
    print(sys._getframe().f_lineno) ## 12

if __name__ == "__main__":
    func()
导入系统 定义函数(f=“Foo”): b=“巴” 打印(sys._getframe().f_code)## 打印(func.uuu code_uuu)##<在0x00B09A20处编码对象func,文件“C:\py\func.py”,第5行>,相同 打印(sys._getframe().f_trace)##无 打印(sys._getframe().f_locals)##{'b':'Bar','f':'Foo'} 打印(sys._getframe().f_lineno)#12 如果名称=“\uuuuu main\uuuuuuuu”: func()
Python中没有任何这样的功能

您可以通过以下方式滥用以访问当前代码对象:

import sys

def foo():
    print sys._getframe(0).f_code.co_name
但这将只打印最初定义的函数名。如果将
foo
功能分配给另一个标识符,则上述代码将继续打印
foo

>>> bar = foo
>>> bar()
'foo'

这就是你想要的吗

In [97]: def a():
    ...:     print sys._getframe().f_code.co_name
    ...:     

In [98]: a()
a

您可以使用获得部分此功能

您还可以使用
exec code
从代码对象执行代码,其中
code
是在上述函数中创建的变量


请注意,
inspect.currentframe()
为您提供了与
sys.\u getframe(0)
相同的对象,但它实际上是以这种方式使用的。

但实际上是以这种方式使用的。否,
inspect
模块为相同任务提供更友好的拼写;同样的警告也适用。+1是否有等效于获取实例名称的东西?出于兴趣,为什么要这样做?@Lattyware,在PHP中,我经常使用
\uuuu函数\uuuuu
\uu方法\uuuu
\uu类\uuu
来创建类似smth的标志,以查看smth发生在哪个组件中。现在我学习Python并一直在测试函数修饰符,我想用同样的技术来看看调用了什么函数。+1是否有等价物来获取实例的名称?+1是否有等价物来获取实例的名称?@eyquem:这要难得多;您可以内省当前框架的code对象,以获得恰好是自定义类实例的函数的第一个参数(如果它被称为
self
就更好了)。不过,这不是故障预防。谢谢。总有一天我会探索这些可能性
import inspect

def foo():
    code = inspect.currentframe().f_code
    print code.co_name