最近半年了一直在用OpenCV-Python + PyQT做开发,说实话这个是我第一次用这个来开发一个项目,其中遇到的各种问题我都努力克服了,但是其中有几个Python的基础语法问题,我平时没有注意到的,结果是坑了我半天,这次斗胆共享出来,一个是记录避免自己以后再犯同类错误,另外一个是给有需要的人避免犯跟我相似的错误。
Python中的元组是不可修改的,说实话之前我真的没有注意过,直到我想修改一些东西的时候,我才发现,然后就掉坑了,PyQT应用直接死机了,没有任何反应,原因居然是我定义了元组然后赋值导致的。坑死了,被自己蠢死了。请看下面的代码:
第一个定义的变量方式元组,不可修改的;第二个定义变量方式数组,可以赋值修改!
For循环临时变量的坑,这个其实我还没想明白,但是我知道这个是个大坑,希望有Python大神可以合理的解释一波!我遍历像素写了个for循环,但是当我遍历像素检查到一些符合条件的像素点的时候,我需要跳过几个像素点然后继续遍历。C++中如果你写下如下代码:
训练只会执行5次,会跳步的,相似的python代码如下:
for i in range(10):
i += 1
print(i)
你敢告诉我这段代码会执行几次吗,我告诉你绝对执行10次,不管你加几。因为它会认为是两个同名的i变量,死活也不会给你跳步的,永远执行10次,我崩溃了,然后我只好把已经写完的代码重新改成while的方式。
使用Python的进程池遇到的问题!我想搞多线程,然后就发现可以搞进程池,当时就觉得这个东西好,这样我就并行了,一次跑八张图,没问题了。然后我就搞了一堆参数列表,有二维的,有一维的,直接往里面扔了:
with
concurrent.futures.ProcessPoolExecutor(num_ps) as executor:
result= executor.map(param1s, param2s, …..paramns)
结果是直接挂了,根本无法多进程执行,后来发现参数列表必须是一维的,而且顺序必须相同,不然必挂!另外一个问题就是返回值的接受,这个也折磨我好久,感觉到处都是坑!