標籤:
近期突然對驗證碼的識別感興趣了,然後就研究了一些Image Recognition和處理的資料,其中有一種影像處理是關於字型的細化和骨架提取的,但是這種演算法沒有現成的java代碼實現,那些號稱的java版代碼多半都是效果很差或是根本不行的..搜尋的途中看到一個用python實現的細化提骨架演算法,效果很不錯,想著就把這個python實現改寫成java的好了..但是呢,其實我不懂python,所以先去w3c看了一遍python文法,然後開始改寫...問題出現了...當遇到來源程式中的邏輯運算子 and 的時候,我猶豫了..來看看w3c中關於and的解釋:
布爾"與" - 如果x為False,x and y返回False,否則它返回y的計算值。
看到這個精簡的解釋後,我震驚了..它到底在說什麼..這和邏輯與有甚麼關係..python中邏輯與的定義怎麼會這麼奇葩..算了,直接用if else把這段話翻譯一遍糊弄過去就算了..但是之後來源程式中出現了 xx and xx and xx的語句,這要用if else來翻譯那簡直了...我突然想正常人的大腦如果按照這個邏輯怎麼可能預期到這段運算式的意義...python的邏輯與應該不奇葩,奇葩的應該是這段解釋才對...重新理了一下思緒..
java中邏輯與(&&)的定義是很清楚的,解釋如下:
與:
a & b :當a,b同時為true時,a&b為true,否則為false
邏輯與:
a && b,當a為false時,那麼a && b就直接返回false,不會對b再進行判斷,因為當a為false時候,無論b為何值,運算式a && b根據與的定義都將是false..但是如果a為true,則需要進一步計算b的值,根據b的值不同,運算式a && b的最終值也不同.
對比了一下w3c的解釋後發現,原來他們說的是一個事情..但是w3c的說法有一定的誤導性,它過分強調了運算式的值為x或是y,而淡化了運算式的含義..讓人有一種錯覺,邏輯與的值不是與出來的,而是某種情況下a或是b的值..
Python的邏輯運算子and小析