UnboundLocalError: local variable referenced before assignment within comprehension
UnboundLocalError: local variable referenced before assignment within comprehension
我正在尝试 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
所以,正如下面的回答,这不是海象运算符的使用方式。
您滥用了条件。每个从迭代器中检索到的值都会计算一次;它不能用于定义 迭代器。当您尝试计算 len(names)
.
时,names
尚未定义
在可以使用 enumerate
的时候使用 range
无论如何都是一种反模式;尝试
retval = {name: idx for idx, name in enumerate(columns)}
请注意 columns
无论如何都没有可靠的排序;集不会像 dict
s 那样保留项目的添加顺序。
我正在尝试 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
所以,正如下面的回答,这不是海象运算符的使用方式。
您滥用了条件。每个从迭代器中检索到的值都会计算一次;它不能用于定义 迭代器。当您尝试计算 len(names)
.
names
尚未定义
在可以使用 enumerate
的时候使用 range
无论如何都是一种反模式;尝试
retval = {name: idx for idx, name in enumerate(columns)}
请注意 columns
无论如何都没有可靠的排序;集不会像 dict
s 那样保留项目的添加顺序。