如何在sage中访问符号函数的名称?

时间:2014-11-28 15:46:23

标签: function sage

嗯,问题很简单。 我有像

这样的符号功能
var('U I')
Z = U / I

现在我想创建一个字典,其中函数的名称(作为字符串),这里是Z,映射到相应的函数。手动操作很简单

{ 'Z' : Z }

但我想让它自动创建。使用str(Z)会返回U/I,所以这没有用。我浏览了一些文档,但没有找到任何将函数名称作为字符串返回的方法。 那我该怎么做?提前感谢您的回答。

1 个答案:

答案 0 :(得分:1)

这里的问题是你根本没有创建一个功能。你已经创建了一个 Python 变量,它引用了U/I,这是一个"符号表达式",因此(无论好坏)本身就是这样。参见例如我认为this SO question是相关的。对于像Z(U/I)=U/I和朋友这样的事情也是如此。

你可以做到

sage: def z(U,I):
....:     return U/I
....: 
sage: z
<function __main__.z>
sage: z.func_name
'z'

但这是一个Python函数,并没有Sage函数的方法。

以下似乎有效,但有一个神秘错误,我现在没有时间跟踪,大概是因为the hash method中的某些内容需要Python函数的代码,而不是我们在这里为Z提供了什么。

sage: Z(U,I) = U/I
sage: z = function("z", nargs=2, eval_func=Z)
Exception AttributeError: AttributeError('sage.symbolic.expression.Expression' object has no attribute '__code__',) in 'sage.symbolic.function.SymbolicFunction._hash_' ignored
sage: z(2,3)
2/3
sage: z.name
<function name>
sage: z.name()
'z'