给定一个列表a
,我正在寻找一种以编程方式查明列表元素是否内联定义的方法,即
a = [123]
或通过引用,即
number = 123
a = [number]
如果是后者,变量名是什么。
任何提示?
答案 0 :(得分:4)
走你正在翻译的代码的abstract syntax tree。一个是Num,另一个是Name。基于列表本身不可能这样做,因为对象通常没有关于它们如何成为的日志,并且在该示例中,优化器可能首先改变了该方法。
答案 1 :(得分:0)
如果您仍可使用number
,则可以进行比较:
id(number) == id(a[0])
根据您的进一步要求,这可能不是您所需要的全部。
答案 2 :(得分:0)
在运行时,如果没有访问源,绝对无法知道引用是内联还是首先分配给变量。基本上你可以假装sys.getrefcount()
可以说实话:
% python3
Python 3.4.3+ (default, Oct 14 2015, 16:03:50)
[GCC 5.2.1 20151010] on linux
Type "help", "copyright", "credits" or "license" for more information.
>>> class Foo():
... pass
...
>>> import sys
>>> sys.getrefcount(Foo())
1
>>> bar = Foo()
>>> sys.getrefcount(bar)
2
但是小整数和常量字符串将共享引用并且事情会失败:
>>> sys.getrefcount('a')
6
>>> sys.getrefcount(1)
758
然后你会遇到这样的情况:价值是在一个函数中创建的,但是在那里返回并且原始引用丢失了,什么不是......
我所知道的唯一真正可用的方法是遍历源代码的抽象语法树。