Python:内联与变量定义

时间:2016-03-08 08:24:08

标签: python variables

给定一个列表a,我正在寻找一种以编程方式查明列表元素是否内联定义的方法,即

a = [123]

或通过引用,即

number = 123
a = [number]

如果是后者,变量名是什么。

任何提示?

3 个答案:

答案 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

然后你会遇到这样的情况:价值是在一个函数中创建的,但是在那里返回并且原始引用丢失了,什么不是......

我所知道的唯一真正可用的方法是遍历源代码的抽象语法树。