小编Axe*_*bit的帖子

为什么 3.10 中按预期抛出 RecursionError 的代码在早期版本中不会抛出?

首先我尝试了这个

def x():
   try:
      1/0 # just an division error to get an exception
   except:
      x()
Run Code Online (Sandbox Code Playgroud)

这段代码在 3.10 中表现正常,并且得到了我RecursionError: maximum recursion depth exceeded预期的结果,但 3.8 出现了堆栈溢出,并且无法正确处理递归错误。RecursionError但我确实记得旧版本的Python中也有,所以我尝试了

def x(): x()
Run Code Online (Sandbox Code Playgroud)

RecursionError这在两个版本的 Python 中都有体现。

就好像(在第一个片段中)递归错误永远不会在 except 中抛出,而是在调用的函数中抛出,然后在调用但由 try- except 处理的函数的第一条指令处抛出错误。

然后我尝试了其他方法:

def x():
   try:
      x()
   except:
      x()
Run Code Online (Sandbox Code Playgroud)

这在某种程度上更奇怪,3.10 以下的堆栈溢出,但在 3.10 中它陷入了循环

你能解释一下这种行为吗?

更新@MisterMiyagi 发现了一个更奇怪的行为,在 except in 中添加语句<=python3.9不会导致 stackoverflow

def x():
   try:
      1/0
   except:
      print("")
      x()
Run Code Online (Sandbox Code Playgroud)

python stack-overflow recursion try-except pythoninterpreter

10
推荐指数
1
解决办法
465
查看次数

如何优化这个异或和算法?

我正在尝试解决这个 hackerrank 问题https://www.hackerrank.com/challenges/xor-subsequence/problem

\n
from functools import reduce\n\ndef xor_sum(arr):\n    return reduce(lambda x,y: x^y, arr)    \n\ndef xorSubsequence(arr):\n    freq = {}\n    max_c = float("-inf") # init val\n    min_n = float("inf") # init val\n    \n    for slice_size in range(1, len(arr)+1):\n        for step in range(0, len(arr)+1-slice_size):\n            n = xor_sum(arr[i] for i in range(step,step+slice_size))\n            \n            freq[n] = freq.get(n,0)+1\n            if freq[n] >= max_c and (n < min_n or freq[n]> max_c):\n                min_n = n\n                max_c = freq[n]\n\n    return  min_n, freq[min_n]\n
Run Code Online (Sandbox Code Playgroud)\n

但它超时了,因为它是 ~O(n^3)。\n我觉得有一些数学技巧,有人可以向我解释解决方案吗?我尝试阅读讨论中的一些解决方案,但我不太明白。

\n

问题副本:

\n …

python algorithm math xor time-complexity

5
推荐指数
2
解决办法
1144
查看次数

如何从 Neovim/Lunarvim 中的诊断浮动窗口复制文本?

我在 Lunarvim,我可以使用 检查线路诊断gl。但我不知道如何用光标去那里复制文本,鼠标也不起作用。

neovim lunarvim

0
推荐指数
1
解决办法
1359
查看次数