回答此问题可获得 20 贡献值,回答如果被采纳可获得 50 分。
<p>此代码是函数的一部分。当我用适当的参数逐行运行函数时,它运行得很好,但是当我调用函数时,它似乎不起作用。以下三行代码及其输出来自函数调用:</p>
<pre><code>print(locals().keys())
dict_keys(['allpost', 'allpre', 'pre', 'post'])
</code></pre>
<p>您可以看到“allpre”存在于我的本地作用域中。这一行代码也在函数中起作用:</p>
<pre><code>print(locals()['allpre'])
[15.0, 12.0, 10.0, 6.0, 12.0, 8.0, 5.0, 3.0]
</code></pre>
<p>但由于某些原因,此代码不起作用:</p>
<pre><code>print([locals()[k] for k in ['allpre']])
Traceback (most recent call last):
File "prepost.py", line 85, in <module> parentinfantstats=delete.bystats(mod='parentinfant',assessment=".*pii[1-3]plus",dta=sortFiltbyMod.copy())
File "/mnt/m/safecare/prepost/delete.py", line 37, in bystats
print([locals()[k] for k in ['allpre']])
File "/mnt/m/safecare/prepost/delete.py", line 37, in <listcomp>
print([locals()[k] for k in ['allpre']])
KeyError: 'allpre'
</code></pre>
<p>有人对可能出现的问题有什么建议吗?我会举一个例子,但似乎不能重复这个问题。你知道吗</p>
<p>这就是整个功能:</p>
<pre><code>import re
from statistics import mean,median,stdev
def bystats(*,mod,assessment,dta):
varz=dta[mod]
alab=[i for i in varz if re.match(assessment.lower(),i.lower())]
alab.insert(0,'prepost')
alab.insert(0,'cact_familycodenormalized')
alst=[varz[i] for i in alab] # [ID,prepost,assessment]
bymodprepost=[list(row) for row in zip(*alst) if row[1] in [1,2]] # [ID,prepost,assessment] if prepost 1 or 2
bymodpost=[i for i in bymodprepost if i[1]==2] # [ID,prepost,assessment] if prepost was 2 (post)
bymodpre=[i for i in bymodprepost if i[0] in [ids[0] for ids in bymodpost] and i[1]==1] # [ID,prepost,assessment] if ID had a post test
allpre,allpost,allch,allpctch=[],[],[],[]
for pre in bymodpre:
post=[i for i in bymodpost if i[0].upper().strip()==pre[0].upper().strip()][0] # find matching post test
if any([True for i in pre[2:]+post[2:] if float(i)<0]): continue # cannot have negative number
sumpre=sum([float(i) for i in pre[2:]]) # sum of pre test assessments
allpre.append(sumpre)
sumpost=sum([float(i) for i in post[2:]]) # sum post test assessments
allpost.append(sumpost)
ch=sumpost-sumpre # change from pre to post
allch.append(ch)
pctch=round(ch/sumpre*100,1) # percent change from pre to post
allpctch.append(pctch)
print(locals().keys())
print(locals()['allpre'])
print(locals()[k] for k in ['allpre'])
</code></pre>
<p>这是函数调用:</p>
<pre><code>parentinfantstats=delete.bystats(mod='parentinfant',assessment=".*pii[1-3]plus",dta=sortFiltbyMod.copy())
</code></pre>