and or引發的深思

2021-08-08 13:07:09 字數 2462 閱讀 6059

python中是沒有三目的,一般但是有替代的方法

print('true' if true else 'false')

不過接受程度更高的應該是

print(true and 'true' or 'false')

print(true and 'true')

這就顛倒實現了類似ruby中的if用法

puts 'true' if true

這種相當於if的半句用法,在很多場景下可以極大的簡化**

def isperson(obj):

return obj.__class__ is person and true

return false

但是,作為邏輯操作符,它的返回值卻保留了原本的物件,沒有轉換成boolean

print(1 and 5 and 3)

其實多次驗證可以發現 and 和 or 的一些特點

1.順序執行:兩種都屬於雙目運算子,同時,結合規律也是從左到右依次執行的

2. 保留物件:經過這兩種符號進行的邏輯判斷,並沒有轉換成布林值,而是保留了物件原來的屬性

3. 條件查詢:and查詢真值為false的物件時中斷查詢,or查詢到真值為true的物件時中斷查詢,返回的都是查詢結束的前乙個物件

4.連線特性:能夠將兩部分的操作語句連線起來,不用新增多餘的修飾

所以我們一般用的類三目運算,可以這樣理解

result = a and b or c

1. a的真值為false:and 操作符查詢到真值為false的物件直接結束 and 操作,進入or操作,不論c真值如何,c都是連線語句查詢的最後物件,必定返回c

2. a的真值為true:and 連線符查詢真值為 false 的物件,因此繼續查詢b

3. b的真值為false:如果是false就會中斷查詢,進入or操作,or馬上查詢到真值,中斷操作,直接返回b

4. b的真值為true:and未找到真值,進入or操作,不論c的真值如何,最後乙個查詢到的都是c,必定返回物件c

連線符使用過程中,遵循以上四點規律,從左到右的結合,自身的查詢和中斷,然後返回的依舊是原本的物件

然後我想起了not

print(not 1)

這個操作會進行物件的強轉成布林型別的操作,並進行反轉,這個操作返回的物件必定是布林值

同樣的,if操作也會有這樣的隱含功效

if obj:

pass

在判斷進行的時候,都會進行物件轉換布林的操作

if 會直接利用了返回布林值,不改變原來的物件屬性,not 只進行變換轉換布林值,本身卻不會直接利用,兩者轉換方式相反

然後我繼續考量了 in ,和 可以連用的 for...in 操作

a = print(1) in (print(2),print(3),print(4))

發現在沒有進行列印操作的時候,依舊列印出了數字

同樣,for...in 也有這個現象

for value in (print(1),print(2),print(3)):

pass

同樣的列印了數字,於是我多加了乙個步驟

for value in (print(1),print(2),print(3)):

print(value)

這次多列印了三個none

實驗證明

1. 在for語句準備執行的時候,元組當中的語句已經執行了

2. 執行for語句時,元組中取出來的的是經過執行後的結果物件

結合之前總結的 and 和 or 的特性,我們可以發現,在真正進入操作的時候,方法傳入或是儲存的東西,都必定是乙個物件

也就是說

1. 在利用and 和 or 操作的時候,我們條件的真值是已經執行過條件判斷之後返回的物件

2. 在存入元組當中時,我們的語句也已經得到了執行,儲存的是語句執行之後的物件

總結起來,就是說進行操作的必定是物件,不是物件會將語句執行完畢然後獲取執行返回值,無返回值返回none

所以:1. 物件是python程式中的方法執行的開端,也是結束

2. 操作語句只能夠存在於過程當中,沒成為物件之前,不能夠進行傳參,返回和儲存

在語句沒有編譯成物件的情況下,唯一能夠執行操作的就是方法,或者成為方法物件了

而且操作語句編譯也顯得繁複,所以這才是方法物件繁榮發張以至於無處不在,功用無線的根本原因吧

注:for和in中間的那個,只能定義成變數,語句定義的話會出錯

「今目標」引發的深思

佛說 種瓜得瓜,種豆得豆,有因必有果 這次停課的背後,必是有停課的理由。我在想根本原因是什麼呢?不能深入到問題的本質,永遠是治標不治本。我看了一部分人的反思部落格,我總結了一下大體的理由如下 懶惰 缺乏責任感 放縱自己 認識程度不足 思想素質偏低 今目標是軟體 如果讓你選擇,你會選擇哪個理由,或者你...

因參加測試職業領域問卷引發的深思 規範的測試

今天做了乙份有關測試領域的網上問卷,引發了我很多的反思和深思,根據類別整理了乙個系列博文,希望與各位分享 原題1 貴公司是否使用了如下缺陷分析方法進行缺陷分析 多選 a 召開缺陷分析會議,討論彙總各缺陷產生的原因 b 使用odc缺陷分析方法 c 使用gompertz方法 d 使用rayleigh分析...

值得深思的

1 我以為小鳥飛不過滄海,是因為小鳥沒有飛過滄海的勇氣。十年以後我才發現,不是小鳥飛不過去,而是滄海的那一頭,早已沒有了等待.2 木頭對火說 抱我 火擁抱了木頭,木頭微笑著化為灰燼 火哭了 淚水熄滅了自己 當木頭愛上烈火注定會被燒傷.3 我真的愛你,閉上眼,以為我能忘記,但流下的眼淚,卻沒有騙到自己...