如果一个函数在不知道自己名字的情况下,怎么才能递归调用自己。这是我一个同事问我的,其实也是获取函数名,但是当时也是回答不出来。
站在用户的角度思考问题,与客户深入沟通,找到延边朝鲜族网站设计与延边朝鲜族网站推广的解决方案,凭借多年的经验,让设计与互联网技术结合,创造个性化、用户体验好的作品,建站类型包括:成都网站设计、做网站、企业官网、英文网站、手机端网站、网站推广、域名申请、网页空间、企业邮箱。业务覆盖延边朝鲜族地区。
谦和、温顺且自持的生活,不乱于心,不困于情,不畏将来,不念过去。
classstdata(Structure):_fields_=[('pBuf',c_char_p),('buflen',c_int)]N=100buf=create_string_buffer(N)d=stdata()d.buflen=Nd.pBuf=cast(buf,c_char_p)n=CallMyCFunc_GetData(byref(d))关键在于create_string_buffer创建可写buffer;cast转换为char*类型。
定义一个A类,然后实例化一个A对象,通过setattr函数来给当前类添加一个变量,值是test函数。调用haha函数,就相当于调用了test函数。 例2,定义一个模块,通过另一个模块函数调用函数来增加变量,值是test2函数。调用haha函数,就相当于调用了test2函数。
原理
python系统会维护一个变量的字典,可以通过locals()或者globals()获取到该字典。由于字典是可变对象,那么,就可以动态的增加变量。由于函数也是一个对象,那么就可以将变量指向函数。这样就可以达到动态修改函数名的目的了。
源文件的函数名?源文件是文件名就能理解,这个函数名不知道是想表达什么。
如果你想通过函数的名称来获取函数的运行地址,可以像下面这样实现:
[python] view plain copy
# File: builtin-import-example-2.py
def getfunctionbyname(module_name, function_name):
module = __import__(module_name)
return getattr(module, function_name)
print( repr(getfunctionbyname("dbm", "open")) )
在这段代码里,通过open字符串的名称获取数据库管理模块dbm的open函数地址。
运行之后,输出如下:
=== RESTART: D:\work\csdn\python_Game1\example\builtin-import-example-2.py ===
function open at 0x00000226467B2BF8