and 和or 的特殊性質
在Python 中,and 和or 執行布林邏輯演算,但是它們並沒有回傳布林值;而是,傳回它們實際進行比較的值之一。下面來看一下實例。
>>> 'a' and 'b' 'b' >>> '' and 'b' '' >>> 'a' and 'b' and 'c' 'c'
使用 and 時,在布林上下文中從左到右演算表達式的值。 0、''、[]、()、{}、None 在布林上下文中為假;其它任何東西都為真。還好,幾乎是所有東西。預設情況下,布林上下文中的類別實例為真,但是你可以在類別中定義特定的方法使得類別實例的演算值為假。你將會在第 5 章中了解到類別和這些特殊方法。如果布林上下文中的所有值都為真,那麼 and 會傳回最後一個值。在這個例子中,and 演算 'a' 的值為真,然後 'b' 的演算值為真,最終傳回 'b'。
如果布林上下文中的某個值為假,則 and 會傳回第一個假值。在這個例子中,'' 是第一個假值。
所有值都為真,所以 and 傳回最後一個真值,'c'。
>>> 'a' or 'b' 'a' >>> '' or 'b' 'b' >>> '' or [] or {} {} >>> def sidefx(): ... print "in sidefx()" ... return 1 >>> 'a' or sidefx() 'a'
使用 or 時,在布林上下文中從左到右演算值,就像 and 一樣。如果有一個值為真,or 立刻回傳該值。本例中,'a' 是第一個真值。
or 演算 '' 的值為假,然後演算 'b' 的值為真,於是回傳 'b' 。
如果所有的值都為假,or 回傳最後一個假值。 or 演算 '' 的值為假,然後演算 [] 的值為假,依序演算 {} 的值為假,最後傳回 {} 。
注意 or 在布林上下文中會一直進行表達式演算直到找到第一個真值,然後就會忽略剩餘的比較值。如果某些值具有副作用,這種特性就非常重要了。在這裡,函數 sidefx 永遠都不會被調用,因為 or 演算 'a' 的值為真,所以緊接著就立刻返回 'a' 了。
如果你是 C 語言駭客,一定很熟悉 bool ? a : b 表達式,如果 bool 為真,表達式演算值為 a,否則為 b。基於 Python 中 and 和 or 的工作方式,你可以完成相同的事情。
範例 . and-or 技巧介紹
>>> a = "first" >>> b = "second" >>> 1 and a or b 'first' >>> 0 and a or b 'second'
這個語法看起來類似 C 語言中的 bool ? a : b 表達式。整個表達式從左到右進行演算,所以先進行 and 表達式的演算。 1 and 'first' 演算值為 'first',則 'first' or 'second' 的演算值為 'first'。
0 and 'first' 演算值為 False,則 0 or 'second' 演算值為 'second'。
然而,由於這種Python 表達式單單只是進行布林邏輯運算,並不是語言的特定構成,這是and-or 技巧和C 語言中的bool ? a : b 語法非常重要的不同。如果 a 為假,表達式就不會照你所期望的那樣運作了。 (你能知道我被這個問題折騰過嗎?不止一次?)
例. and-or 技巧無效的場合
>>> a = "" >>>b = "second" >>> 1 and a or b 'second'
由於a 是一個空字符字串,在Python 的布林上下文中空字串被認為是假的,1 and '' 的演算值為'',最後'' or 'second' 的演算值為'second'。噢!這個值並不是你想要的。
and-or 技巧,bool and a or b 表達式,當 a 在布林上下文中的值為假時,不會像 C 語言表達式 bool ? a : b 那樣運作。
在 and-or 技巧後面真正的技巧是,確保 a 的值絕不會為假。最常用的方式是使 a 成為 [a] 、 b 成為 [b],然後使用返回值列表的第一個元素,應該是 a 或 b中的某一個。
範例 : 安全使用 and-or 技巧
>>> a = "" >>> b = "second" >>> (1 and [a] or [b])[0] ''
由於 [a] 是非空列表,所以它絕不會為假。即使 a 是 0 或 '' 或其它假值,列表 [a] 也為真,因為它有一個元素。
到現在為止,這個技巧可能看起來問題超過了它的價值。畢竟,使用 if 語句可以完成相同的事情,那為什麼要經歷這些麻煩事呢?哦,在很多情況下,你要在兩個常數值中進行選擇,由於你知道 a 的值總是為真,所以你可以使用這種較為簡單的語法而且不用擔心。對於使用更為複雜的安全形式,依然有很好的理由要求這樣做。例如,在 Python 語言的某些情況下 if 語句是不允許使用的,例如在 lambda 函數中。
註:這裡由於語句是從左向右解釋的。我們可以這樣的來理解。
and語句:
0and* 不需要再考慮*是0還是1,結果是0
1and* 需要考慮*是0還是1來決定結果。
1or* 不需要考慮後面的*,結果為1
0or* 需要考慮後面的*來決定結果
【相關推薦】
以上是詳細介紹Python中and和or實際用法的詳細內容。更多資訊請關注PHP中文網其他相關文章!

2小時內可以學會Python的基本編程概念和技能。 1.學習變量和數據類型,2.掌握控制流(條件語句和循環),3.理解函數的定義和使用,4.通過簡單示例和代碼片段快速上手Python編程。

Python在web開發、數據科學、機器學習、自動化和腳本編寫等領域有廣泛應用。 1)在web開發中,Django和Flask框架簡化了開發過程。 2)數據科學和機器學習領域,NumPy、Pandas、Scikit-learn和TensorFlow庫提供了強大支持。 3)自動化和腳本編寫方面,Python適用於自動化測試和系統管理等任務。

兩小時內可以學到Python的基礎知識。 1.學習變量和數據類型,2.掌握控制結構如if語句和循環,3.了解函數的定義和使用。這些將幫助你開始編寫簡單的Python程序。

如何在10小時內教計算機小白編程基礎?如果你只有10個小時來教計算機小白一些編程知識,你會選擇教些什麼�...

使用FiddlerEverywhere進行中間人讀取時如何避免被檢測到當你使用FiddlerEverywhere...

Python3.6環境下加載Pickle文件報錯:ModuleNotFoundError:Nomodulenamed...

如何解決jieba分詞在景區評論分析中的問題?當我們在進行景區評論分析時,往往會使用jieba分詞工具來處理文�...

如何使用正則表達式匹配到第一個閉合標籤就停止?在處理HTML或其他標記語言時,常常需要使用正則表達式來�...


熱AI工具

Undresser.AI Undress
人工智慧驅動的應用程序,用於創建逼真的裸體照片

AI Clothes Remover
用於從照片中去除衣服的線上人工智慧工具。

Undress AI Tool
免費脫衣圖片

Clothoff.io
AI脫衣器

AI Hentai Generator
免費產生 AI 無盡。

熱門文章

熱工具

Safe Exam Browser
Safe Exam Browser是一個安全的瀏覽器環境,安全地進行線上考試。該軟體將任何電腦變成一個安全的工作站。它控制對任何實用工具的訪問,並防止學生使用未經授權的資源。

記事本++7.3.1
好用且免費的程式碼編輯器

Dreamweaver CS6
視覺化網頁開發工具

MinGW - Minimalist GNU for Windows
這個專案正在遷移到osdn.net/projects/mingw的過程中,你可以繼續在那裡關注我們。 MinGW:GNU編譯器集合(GCC)的本機Windows移植版本,可自由分發的導入函式庫和用於建置本機Windows應用程式的頭檔;包括對MSVC執行時間的擴展,以支援C99功能。 MinGW的所有軟體都可以在64位元Windows平台上運作。

PhpStorm Mac 版本
最新(2018.2.1 )專業的PHP整合開發工具