python布爾測試對象_python布爾類型和邏輯運算

布爾類型

python中True表示真,False表示假,它們是布爾類型:1

2>>>?type(True)

在python中,bool的True和False是數值1和0的字符串表示格式,實際上bool類型是int類型的一個子類。1

2>>>?bool.__bases__(,)

因為True/False是數值1和0的另一種表示方式,它們可以直接參與數值運算。1

2

3

4>>>?True?+?23>>>?False?+?2?-?11

True/False的各種形式

雖然True代表1,False代表0。但實際上,python中的任何一個數據對象要么是True,要么是False,所以可以直接在布爾測試的表達式中使用,而并非一定要去大小比較、通過函數測試等等。比如:1

2if?"a":while?1:

可以通過bool()函數來測試數據對象、表達式是True還是False。例如:1

2

3

4

5

6

7

8>>>?bool(0)

False>>>?bool(1)

True>>>?bool('a')

True>>>?bool('')

False

那么,哪些類型的數據是True,哪些類型的數據是False?整數值0、浮點數值0.0等、空字符串都為假

None為假

空數據對象都是假,比如[]、{}、()等元組比較特殊,如果元組中有元素,但全是為假的元素,則也為假

以下是各種內置數據類型的一些真、假示例:1

2

3

4

5

6

7

8

9??????????True?????????????????False

----------------------------------number:???1、1.1???????????????0、0.0string:???'a'??????????????????''None:??????????????????????????Nonelist:?????['a']、[1]???????????[]

[0]、['']、[None]

Set/Dict:?{'a'}????????????????{}tuple:????('a')、(1)???????????()、('')、(0)、(None)

看幾個示例:1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17>>>?bool(1),?bool(0)

(True,?False)>>>?bool('a'),?bool('')

(True,?False)>>>?bool(None)False>>>?bool(['a']),?bool([1]),?bool([]),?bool(['']),?bool([()])

(True,?True,?False,?True,?True)>>>?bool({'a'}),?bool({}),?bool({''})

(True,?False,?True)>>>?bool(('a')),?bool(()),?bool(('')),?bool((0)),?bool(({}))

(True,?False,?False,?False,?False)

None

None為假,它不是表示對象為空,也不是表示對象未定義。它自身就是一個實實在在的數據對象,在內存中有自己的內存地址。可以認為,None是一種特殊的數據對象,像數值1、字符串'a'一樣,只不過內存中這個數據對象里面存儲的數據是我們不得而知的,但它永遠表示為False。

在Python中,沒有顯式定義return語句的函數、方法并不意味著沒有返回值,它們的默認返回值是None。比如print()函數:1

2

3

4>>>?a=print("aa")aa>>>?print(a)None

None有時候有些小技巧。比如,訪問或設置超出列表長度的元素時會報錯:1

2

3

4

5

6

7

8

9>>>?S?=?[]>>>?S[1]

Traceback?(most?recent?call?last):

File?"",?line?1,?in?IndexError:?list?index?out?of?range>>>?S[1]?=?2Traceback?(most?recent?call?last):

File?"",?line?1,?in?IndexError:?list?assignment?index?out?of?range

但是可以預先將某些數量的None對象填充到列表中去,這樣列表就具備了元素,盡管它們都是None對象。

例如,向列表中填充10個None元素:1

2

3

4

5

6

7>>>?S?=?[None]?*?10>>>?S

[None,?None,?None,?None,?None,?None,?None,?None,?None,?None]>>>?S[1]>>>?S[1]?=?2>>>?S

[None,?2,?None,?None,?None,?None,?None,?None,?None,?None]

當然,將None換成其它數據也一樣可以,比如0,但用None來填充,一看就知道是為了填充而填充的占位符,不是實際要操作的元素。

另外,預先填充并不能限制列表的長度,可以繼續向這個列表中append()新元素。

邏輯運算:and、or、not

python中只支持字符形式的and、or、not邏輯運算,不支持符號類型的&&、||、!。X and Y:X和Y都為真時,返回真

X or Y:X或Y為真,返回真

not X:X真假取反

需要注意,and和or會短路運算(即只要能確定真假關系,就立即停止運算),并返回運算的結果(不是返回True/False,而是返回表達式的運算結果)。而not運算是返回True/False的。

例如,and的邏輯運算:1

2

3

4

5

6>>>?2?and?3,?3?and?2(3,?2)>>>?[]?and?{}

[]>>>?3?and?[]

[]

上面第一行and測試,因為and左邊的都是True,所以必須得評估and右邊的值,那么不管and右邊是True還是False,都會返回and右邊的值,比如第一行and測試,第三行and測試。第二行and測試中,因為and左邊為False,所以直接能確定為False,所以直接短路返回[]。

再看or邏輯運算:1

2

3

4

5

6>>>?2?or?3,3?or?2(2,?3)>>>?[]?or?33>>>?[]?or?{}

{}

上面第一行or測試,因為or左邊已經能直接確定為True,所以直接短路返回or左邊的值。第二行和第三行or測試,因為or左邊都為False,所以必須測試右邊的,所以不管or右邊是True還是False,都返回or右邊的值。

再次說明,and、or返回的不是True/False的布爾值,而是邏輯表達式的運算結果。但因為python中只要是數據,要么是True,要么是False,所以and/or/not都可以用于真假測試,只不過and/or還可以在布爾測試的基礎上進行賦值操作。

例如,如果變量a為False,就賦值為某個值,否則采用a原有的值。a?=?a?or?"hhhh"

更通用的,變量A取X、Y、Z等表達式中的一個。1

2A?=?X?or?YA?=?X?or?Y?or?Z

不僅如此,and/or還能實現if中選擇值的功能。例如,下面是等價的:1

2

3

4

5

6A?=?((?X?and?Y)?or?Z)if?X:

A?=?Yelse:

A?=?Z

當然,這種用and/or實現邏輯的可讀性太差,能用if的當然用if。

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/538969.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/538969.shtml
英文地址,請注明出處:http://en.pswp.cn/news/538969.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

mac預裝的php路徑,Mac使用系統自帶php和Apache

最美的語言本文將介紹在Mac環境下如何使用系統本身所帶有的Apache(阿帕奇服務器)通過預裝的PHP版本來運行PHP的相關代碼,相對來講在OS X系統下相對好配置一些,因為Apache和PHP都預裝好了,如果是Windows環境我們需要自己安裝ApachePHPMysql(通…

線程池與Callable更配哦

概述 Callable介紹見:http://blog.csdn.net/zengmingen/article/details/53288119 多線程介紹見:http://blog.csdn.net/zengmingen/article/details/53284999 代碼 TaskCallable.javapackage multithreading.pool;import java.util.concurrent.Callabl…

IP編址,IP地址介紹與子網劃分方法

網絡層位于數據鏈路層與傳輸層之間。網絡層中包含了許多協議,其中最為重要的協議就是IP協議。網絡層提供了IP路由功能。理解IP路由除了要熟悉IP協議的工作機制之外,還必須理解IP編址以及如何合理地使用IP地址來設計網絡。 上層協議類型 以太網幀中的Typ…

3- OpenCV+TensorFlow 入門人工智能圖像處理-TensorFlow入門

tensorflow基礎入門 思考一個問題: 如何剛好學習TensorFlow 類比為一門開發語言,學會語法,api的調用, 原理性掌握。語言的要素: 基礎數據類型 運算符 流程 字典 數組 import tensorflow as tf# 常量,指定數據類型 data1 tf.const…

r 函數返回多個值_第四講 R描述性統計分析

在“R與生物統計專題”中,我們會從介紹R的基本知識展開到生物統計原理及其在R中的實現。以從淺入深,層層遞進的形式在投必得醫學公眾號更新。在上一講中,我們介紹了第三講 R編程基礎-矩陣和數據框 (戳這里即可跳轉)。到現在為止,大…

python雙線性插值函數_雙線性插值法原理 python實現

碼字不易,如果此文對你有所幫助,請幫忙點贊,感謝!一. 雙線性插值法原理:① 何為線性插值?插值就是在兩個數之間插入一個數,線性插值原理圖如下:在位置 x 進行線性插值,插…

張恩民 php,php100教程_php100張恩民php視頻 56課時_網站編程_寂涯網絡學習基地

1、PHP基本語法和數據類型:(1)、PHP基本語法:1、htm 和 php 混編2、一個語句以 ; (分號結束)3、如何定義一個變量,和變量的使用(2)、PHP數據運算類型四種標量類型:boolean(布爾型)integer(整型)float(浮點型,也作“do…

Oracle 自帶sqldeveloper導入數據到表

步驟 1、建一張字段名和類型與要導入數據一致的表。 2、如果是excel文件,另存為 csv文件。 因為excel文件遇到空格會報錯,excel文件太大工具會讀取文件失敗。 而csv文件是秒級讀取,有空格也會導入不會報錯。 ------------- 更多的Java&am…

百度騰訊中興華為全部入局Linux Foundation深度學習基金會

2019獨角獸企業重金招聘Python工程師標準>>> 雖然名字叫做Linux Foundation,但是這家基金會關注的領域并不局限在Linux操作系統領域。事實上,Linux Foundation基金會還為很多其他開源基金和項目提供支持,比如Cloud Foundry、Autom…

python判斷點在矩形內_判斷平面內矩形和圓是否有交點的python實現

#! /usr/bin/env python# -*- coding: utf-8 -*-filename : 平面坐標內矩形與圓是否相交usage :authors : U{peterguo}copyright: tencentdate : 2012.08.21version : 1.0.0.0Modified History:2012.08.21 創建import osimport sysimport reimport urllib2import timeimport da…

python讀取mysql數據庫_Python操作MySQL數據庫9個實用實例

在Windows平臺上安裝mysql模塊用于Python開發 用python連接mysql的時候,需要用的安裝版本,源碼版本容易有錯誤提示。下邊是打包了32與64版本。 MySQL-python-1.2.3.win32-py2.7.exe MySQL-python-1.2.3.win-amd64-py2.7.exe 實例 1、取得 MYSQL 的版本 #…

win主機上搭建php網站運行環境,Windows server 2008搭建php運行環境圖文詳解(php5.3)

這篇文章主要為大家分享下Windows server 2008搭建php運行環境的步驟,需要的朋友可以參考下下載php組件包首先到http://windows.php.net/download/下載你需要的php版本,這里我下載的是php5.3。下面解壓php組件 包到磁盤上。安裝Microsoft Visual C 2008 …

python 登陸微博 被刪除 token_爬取微博信息,使用了cookie仍然無法登錄微博

按照網上的模板自己寫了類似的代碼爬取微博,可是response回來的html是登錄界面的html,應該是沒有成功登陸微博,但是和網上的代碼是基本一樣的from bs4 import BeautifulSoupimport pandas as pdimport requestsurl "https://weibo.cn/2…

plsql developer連接oracle--本地不安裝oracle

工具 數據庫開發程序 PLSQL Developer oracle 客戶端 instantclient,點擊下載 (下載與oracle相同版本或最新版本,如果 PLSQL Developer是32位,則要下載32位的)安裝 1、解壓oracle客戶端 到盤某個目錄。我的目錄是C:\or…

ubuntu networking 與 network-manager

剛遇到的坑,因為操作不當導致網絡中斷,于是手動配置了/etc/network/interfaces , 修復了系統之后發現ubuntu-desktop中的有線鏈接不見了,百度了一下說是networking服務和network-manger服務會起沖突。 【Server版本】 在UbuntuServer版本中&…

mysql 升序_mysql 的 查找 與 排序

mysql 的 查找 &#xff1a;SELECT name,age FROM mytable; # 在mytable 中所有的name,age 數據SELECT name,age FROM mytable WHERE age>25; #在mytable 中所有的name,age 數據&#xff0c;其中age必須小于25SELECT name,age FROM mytable WHERE age<25 OR age>30; #…

Hadoop3.0的新特性

轉載&#xff1a;http://blog.csdn.net/sinat_31726559/article/details/52103229 點擊閱讀原文 -------------------------------------- 1. Hadoop3.0簡介 Hadoop 2.0是基于JDK 1.7開發的&#xff0c;而JDK 1.7在2015年4月已停止更新&#xff0c;這直接迫使Hadoop社區基于…

python torch exp_學習Pytorch過程遇到的坑(持續更新中)

1. 關于單機多卡的處理&#xff1a;在pytorch官網上有一個簡單的示例&#xff1a;函數使用為&#xff1a;torch.nn.DataParallel(model, deviceids, outputdevice, dim)關鍵的在于model、device_ids這兩個參數。DATA PARALLELISM?pytorch.org但是官網的例子中沒有講到一個核心…

php 讀文件返回字符串,PHP:file_get_contents('php:// input')返回JSON消息的字符串...

我正在嘗試在我的PHP應用程序中讀取JSON消息&#xff0c;這是我的php代碼&#xff1a;$json file_get_contents(php://input);$obj json_decode($json, TRUE);echo $obj->{S3URL};當我這樣做時&#xff0c;出現以下錯誤&#xff1a;Trying to get property of non-object …

Android中ListView數據使用sAdapter.notifyDataSetChanged();方法不刷新的問題

原文鏈接&#xff1a;http://blog.csdn.net/caihongdao123/article/details/51513410 點擊閱讀原文 ------------------------- 1.涉及到數據庫 當要動態顯示更數據庫改動&#xff0c;相信大家應該都用過notifyDataSetChanged();. 例如&#xff1a; ...... …