回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>因此,我创建了一个函数,它将一个操作(在本例中,一个数组与一个正弦波进行逐点乘法,但这与我的问题无关)。在</p>
<p>现在我已经创建了另一个函数,我想用它创建一个<code>string</code>的python代码,以便以后多次应用第一个函数。第二个函数的输入可以是<code>string</code>,也可以是<code>array</code>,因此如果需要,我也可以在第二个函数的输出上使用第二个函数。我在字符串中获取变量名的方法在函数之外工作。在</p>
<p><strong>输入:</strong></p>
<pre><code>var = np.array([[1,3],[2,4]]) # or sometimes var = 'a string'
if type(var)==str:
var_name = var
else:
var_name = [ k for k,v in locals().items() if v is var][0]
var_name
</code></pre>
<p><strong>输出:</strong></p>
^{pr2}$
<p>所以这里<code>var</code>是提供给函数的变量(数组或字符串),在本例中是一个数组。if语句很好地返回了它的名称。在</p>
<p>但是,当我在函数中使用这个函数时,不管我给它什么输入,它实际上似乎在locals()中查找<strong>var</strong>。不知何故,它不会从函数输入中获取<strong>var</strong>。在</p>
<p><strong>定义:</strong></p>
<pre><code>def functionTWO(var, listoflistsofargs=None):
if type(var)==str:
var_name = var
else:
var_name = [ k for k,v in locals().items() if v is var][0]
if listoflistsofargs==None:
return var_name
command = []
for i in range(len(listoflistsofargs)):
if i==0:
command.<a href="https://www.cnpython.com/list/append" class="inner-link">append</a>('functionONE(')
command.append(var_name)
command.append(',%.17f, %.17f)' % tuple(listoflistsofargs[i]))
else:
command.insert(0,'functionONE(')
command.append(',%.17f, %.17f)' % tuple(listoflistsofargs[i]))
''.join(command)
command[0] = var_name + ' + ' + command[0]
return ''.join(command)
</code></pre>
<p><strong>输入:</strong></p>
<pre><code>somearray = np.array([[1,2,3],[1,2,3],[1,2,3]])
args = [[1,3],[6,5]]
command = functionTWO(somearray, args)
command
</code></pre>
<p><strong>输出:</strong></p>
<pre><code>NameError: name 'var' is not defined
</code></pre>
<p><strong>想要的输出:</strong></p>
<pre><code>'functionONE(functionONE(somearray, 1, 3), 6, 5)'
</code></pre>
<p>为什么<code>listoflistsofargs</code>取自函数输入而<code>var</code>不是?我在<code>functionTWO</code>的定义中的listcomponsion中指定<code>var</code>。通常,当我使用列表理解和函数输入时,它工作得很好。有人知道为什么这里不是这样吗?提前谢谢你!在</p>
<p><strong>编辑:</strong>所以我想答案是<strong>不要</strong>。Marcin实现的类看起来更干净,代码量也大致相同。太可惜了,我不能在函数中使用这个函数。对于其他关于使用变量名作为字符串的<strong>dont</strong>(实际上是其他想法),有一个<a href="https://stackoverflow.com/questions/2553354/how-to-get-a-variable-name-as-a-string-in-python">this</a>问题,我在上面列出了对变量名的理解。在</p>