如何解决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 举报,一经查实,本站将立刻删除。