当我在 Python 3.5 上运行此代码时,我得到
名称错误名称“md”未定义。
我对 md 使用了加星号的表达式,因此它会捕获所有内容 的中间值。由于它不起作用,我尝试使用带星号的 函数上方代码中的表达式 (drop_first_last),并且该加星号的表达式运行良好。
t = [3, 5, 6,8, 2, 9]
first, *middle, last = t
avgg = np.mean(middle)
print('middle is:', middle)
print('avg is:', avgg)
def drop_first_last(t):
frst, *md, lst = t
return np.mean(md)
drop_first_last(t)
print("avg",md)
最佳答案
md
的范围仅限于 drop_first_last
函数内部的命名空间,并且无法在后者之外访问,除非您考虑将其全局化 。除此之外,在我看来,您并不希望 print
列表 md
本身。我认为您想要做的是打印列表元素的平均值。所以,而不是:
drop_first_last(t)
print("avg is: ",md)
做:
print("avg is: ",drop_first_last(t))
但是,如果您确实在 drop_first_last
函数内定义的 md
变量之后,那么您可以按如下方式重新定义函数:
def drop_first_last(t):
global md
frst, *md, lst = t
return np.mean(md)
通过以这种方式定义的函数,您现在可以访问 md
变量(这是一个列表
)。
t = [3, 5, 6, 8, 2, 9]
print(drop_first_last(t))
print(md)
产量:
#5.25
#[5, 6, 8, 2]
我希望这会有所帮助。
关于函数内的 Python 星号表达式不起作用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/40478289/