Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/visual-studio-2012/2.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-以编程方式更新当前函数名属性_Python_Python 2.7_Function - Fatal编程技术网

Python-以编程方式更新当前函数名属性

Python-以编程方式更新当前函数名属性,python,python-2.7,function,Python,Python 2.7,Function,我目前正在使用nose执行一些测试,当使用带有nose+xunit输出的生成器时,您需要设置当前函数的\uuuuuu name\uuuu属性,以正确控制xunit输出中的测试名称(参见示例) 因为我不想每次都像这样硬编码函数名: def my_function(): for foo in bar: fn = lambda: some_generated_test(foo) fn.description = foo.get('name') my_function.__n

我目前正在使用nose执行一些测试,当使用带有nose+xunit输出的生成器时,您需要设置当前函数的
\uuuuuu name\uuuu
属性,以正确控制xunit输出中的测试名称(参见示例)

因为我不想每次都像这样硬编码函数名:

def my_function():
  for foo in bar:
    fn = lambda: some_generated_test(foo)
    fn.description = foo.get('name')
    my_function.__name__ = foo.get('name')
    yield fn
如何以编程方式引用函数并设置
\uuu name\uuu


我试过使用sys.\u getframe(),它会产生关于当前函数(名称等)的各种属性,我试着使用
setattr(*something*,“\u name\u”,some\u test\u name)
,但这不起作用,因为我似乎无法确定sys.\u getframe()的哪一部分引用了该函数。

最终通过SO找到了解决方案:

比我想象的要复杂得多,但我现在可以:

def my_function():
  for foo in bar:
    fn = lambda: some_generated_test(foo)
    fn.description = foo.get('name')
    setattr(get_func(), "__name__", foo.get('name'))
    yield fn

然后,
xunit
输出包含生成器的数据
name
条目。

为什么不在函数外部定义一些测试名称():?或者编写完成该操作的decorator。另外,我认为inspect模块可以帮助您获取函数名。@user2357112函数包含生成器,但是nose+xunit使用函数名作为测试名,这在您希望使用生成的测试名时是不准确的。设置
函数有什么问题吗?您希望如何引用该函数?现在还不清楚你想在这里做什么。