<p><strong>方法1(最坏的方法):</strong></p>
<p>正如其他人所提到的,您可以通过globals()或稍微安全一些的locals()实现您想要做的事情</p>
<p>不过,我强烈建议你不要那样做。这是糟糕的编码实践。如果你一开始就不能手工打出来,为什么还要手工打出来呢?实际上没有理由需要将该值作为局部变量,特别是考虑到将其添加到globals/locals所做的一切实际上就是将其添加到另一个字典中。你知道吗</p>
<p><strong>方法2:</strong>保持原样</p>
<p>保持现状有什么不对?是这样的:</p>
<pre><code>s[1]
</code></pre>
<p>与</p>
<pre><code>p1
</code></pre>
<p><strong>方法3:</strong>使用字典</p>
<pre><code>numbers = {"p{}".format(i):s[i] for i in range(len(s)}
</code></pre>
<p>那么</p>
<pre><code>numbers["p1"]
</code></pre>
<p><strong>方法4:</strong>Getattr方法</p>
<p>如果你真的需要速记的话,我建议你用一个<strong>getattr</strong>集来命名一个类,你可以给任何你想方便的东西命名,比如。请记住,方法不能以数字开头:</p>
<pre><code>class MyClass(object):
def __init__(self, lst):
self.s = lst
def __getattr__(self, name):
try:
return self.s[int(name[1:])]
except:
raise AttributeError()
</code></pre>
<p>你可以这样使用它:</p>
<pre><code>x = MyClass(s)
x.p1
</code></pre>
<p>你可以这样使用它:</p>
<p><strong>方法5:</strong>Python魔法!你知道吗</p>
<p>结合使用property类、元类和<strong>new</strong>magic方法。这是过分的,但至少你学会了python的一个好技巧。你知道吗</p>
<pre><code>s = ['799.58812', '437.90386', '282.94545', '1.8511', '6.31', '-0.2928', '0.0687', '0.3615', '19.0002', '0.021375', '-76.404702', '-76.401867', '-76.400922', '-76.422349', '6.002']
def create_property(index):
def getr(self):
return s[index]
def setr(self, value):
s[index] = value
def delr(self):
raise AttributeError("Cannot delete this field")
return property(getr, setr, delr)
class PropertyCreatorClass(type):
def __new__(mcs, clsname, bases, dct):
for i in range(len(s)):
dct["p{}".format(i)] = create_property(i)
return type.__new__(mcs, clsname, bases, dct)
class SClassRep(object):
__metaclass__ = PropertyCreatorClass
</code></pre>
<p>下面是你将如何使用它。你知道吗</p>
<pre><code>x = SClassRep()
x.p1
</code></pre>