嗯,问题很简单。 我有像
这样的符号功能var('U I')
Z = U / I
现在我想创建一个字典,其中函数的名称(作为字符串),这里是Z,映射到相应的函数。手动操作很简单
{ 'Z' : Z }
但我想让它自动创建。使用str(Z)
会返回U/I
,所以这没有用。我浏览了一些文档,但没有找到任何将函数名称作为字符串返回的方法。
那我该怎么做?提前感谢您的回答。
答案 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'