微信公众号搜"智元新知"关注
微信扫一扫可直接关注哦!

UnboundLocalError:在理解中赋值之前引用的局部变量

如何解决UnboundLocalError:在理解中赋值之前引用的局部变量

我正在尝试使用 dict 推导式,并在这样的示例中尝试 PEP572:= 运算符):

columns = {'idx','class_name'}
# populate them somehow
# ...
retval = {names[idx]:idx for idx in range(len(names)) if (names := list(columns))}

所以基本上,一个 dict 包含 set 中的项目和一个迭代它的值。 但是,names 似乎是 UnboundLocalError

以下是我想要做的,捕获理解范围的外部变量的别名:

names = list(columns)
retval = {names[idx]:idx for idx in range(len(names))}

为什么这是一个错误

编辑

在捕获的 columns 中尝试此操作:

retval = {names[idx]:idx for idx in range(len(names:= list(columns)))}

产生了更有意义的恕我直言错误

SyntaxError: assignment expression cannot be used in a comprehension iterable expression

因此,如下所述,这不是海象运算符的使用方式。

解决方法

您滥用了条件。每个从迭代器中检索到的值都会评估一次;它不能用于定义迭代器。当您尝试计算 names 时,len(names) 尚未定义。

在可以使用 range 的情况下使用 enumerate 无论如何都有些反模式;试试

retval = {name: idx for idx,name in enumerate(columns)}

请注意,columns 无论如何都没有可靠的排序;集合不会像 dict 那样保留添加项目的顺序。

版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。