use*_*673 5 python iteration loops pyscript
我有一个名为 current_month_list 的列表,每个月都会填充该月的星期一。即六月份将是:
current_month_list = 6, 13, 20, 27
Run Code Online (Sandbox Code Playgroud)
我在用着
next_rubbish_day = next(x for x in current_month_list if x > todays_date.day)
Run Code Online (Sandbox Code Playgroud)
返回列表中的下周一,即 20 作为今天的 16
这运作良好,但我试图转换为 Pyscript,它在不同的环境中使用它,显然(在另一个网站上引用)'
pyscript 包含一个异步 python 解释器,并且没有实现在解释器中特别困难的某些功能。其中包括发电机。
我得到的错误是
未实现 ast ast_generatorexp
所以我的问题是,是否有另一种方法来编码。我不太擅长 python,所以希望得到一些帮助。谢谢你的期待。
由于生成器被禁止,因此只需回到常规循环即可。next()将返回该生成器表达式中的下一项,并且由于您刚刚创建了生成器,因此这将是第一项。因此,一旦你有了第一个项目,就可以跳出循环:
for x in current_month_list:
if x > todays_date.day:
next_rubbish_day = x
break
Run Code Online (Sandbox Code Playgroud)
现在,如果;x > todays_date.day中没有任何一个,这段代码将不会抛出任何错误。current_month_list你的原始代码会抛出StopIteration异常。要实现此功能,您只需使用以下for..else形式:
for x in current_month_list:
if x > todays_date.day:
next_rubbish_day = x
break
else:
# This code runs only if the loop finishes without being broken
raise StopIteration()
Run Code Online (Sandbox Code Playgroud)
据我所知,该片段的行为与您的next(...)声明相同。