我看到下面的代码,我无言以对。这是:
>>> import sympy
>>> sympy.var('x')
x
>>> x
x
>>> type(x)
<class 'sympy.core.symbol.Symbol'>
>>>
请注意,从未分配变量x
。发生了什么事?
在我看来,函数sympy.var
接受一个字符串作为输入参数,并声明一个类型为sympy.core.symbol.Symbol
的全局变量,其名称等同于参数。因此,每次调用该函数时,都会有一个新变量,其名称是传递给函数的最后一个参数。
答案 0 :(得分:2)
答案 1 :(得分:2)
要向@Stephen Rauch的答案添加一些细节,请查看核心源代码:
from inspect import currentframe
frame = currentframe().f_back
try:
syms = symbols(names, **args)
if syms is not None:
if isinstance(syms, Basic):
frame.f_globals[syms.name] = syms
elif isinstance(syms, FunctionClass):
frame.f_globals[syms.__name__] = syms
else:
traverse(syms, frame)
finally:
del frame # break cyclic dependencies as stated in inspect docs
如您所见,使用inspect.currentframe().f_back.f_globals
,您可以获得最新的globals
。