1. 程式人生 > >Python語言學習講解八:型別判斷type與isinstance的區別

Python語言學習講解八:型別判斷type與isinstance的區別

注:每週一到週五都會進行相關python基礎知識更新,歡迎大家提寶貴的意見

type和isinstance共同點:用於驗證引數型別

在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。

這樣做不但便於除錯,而且增加健壯性。因為客戶端是可以作弊的,不要輕易相信客戶端傳過來的引數。

驗證型別用type函式,非常好用,比如

>>type('foo') == str

True

>>type(2.3) in (int,float)

True

區別:在判斷子類上。

type()不會認為子類是一種父類型別。

isinstance()

會認為子類是一種父類型別。

eg:

1. class Foo(object):  

2.     pass  

3.   

4. class Bar(Foo):  

5.     pass  

6.   

7. print type(Foo()) == Foo  

8. print type(Bar()) == Foo  

9. print isinstance(Bar(),Foo)  

輸出

True

False

True

需要注意的是,舊式類跟新式類的type()結果是不一樣的。舊式類都是<type 'instance'>。

1. class A:  

2.     pass

  

3.   

4. class B:  

5.     pass  

6.   

7. class C(object):  

8.     pass  

9.   

10. print 'old style class',type(A())  

11. print 'old style class',type(B())  

12. print 'new style class',type(C())  

13. print type(A()) == type(B())  

輸出

old style class <type 'instance'>

old style class <type 'instance'>

new style class <class '__main__.C'>

True

不存在說isinstance比type更好。看情況使用

相關推薦

Python語言學習講解型別判斷typeisinstance區別

注:每週一到週五都會進行相關python基礎知識更新,歡迎大家提寶貴的意見 type和isinstance共同點:用於驗證引數型別 在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。 這樣做不但便於除錯,而且

Python型別判斷typeisinstance

def compute_entropy(self, dataset): """ 計算資料集dataset的資訊熵 dataset: 第一列為資料集的label """ if isinstance(dataset, np.ndarray): pass e

python資料型別判斷typeisinstance區別

type()不會認為子類是一種父類型別,isinstance()會認為子類是一種父類型別 class Foo(object): pass class Bar(Foo): pass print type(Foo()) == Foo print

型別判斷typeisinstance區別

在遊戲專案中,我們會在每個介面驗證客戶端傳過來的引數型別,如果驗證不通過,返回給客戶端“引數錯誤”錯誤碼。 這樣做不但便於除錯,而且增加健壯性。因為客戶端是可以作弊的,不要輕易相信客戶端傳過來的引數。 驗證型別用type函式,非常好用,比如 >>type('fo

Python 語言學習 第一篇資料型別(數字,集合,布林型別,操作符)

Python語言最常用的物件是變數和常量,常量的值是字面意思,其值是不可變的,變數的值是可變的,例如,123,"上海"是常量,而a=1,a=2,其中a是變數名。內建的核心資料型別有:數字、字串、列表、字典、元組、檔案、集合、None和布林型別。Python是強型別的語言,變數的資料型別是由初始化的常量來指定的

Python 語言學習函式2(引數、lamdba和函式屬性)

函式的引數是引數暴露給外部的介面,向函式傳遞引數,可以控制函式的流程,函式可以0個、1個或多個引數;在Python中向函式傳參,使用的是賦值方式。 一,傳遞引數 引數是通過賦值來傳遞的,傳遞引數的特點是: 引數的傳遞是通過自動把物件賦值給函式的本地變數名來實現的, 在函式內部的變數名的賦值不會

Python語言學習講解十四python之用純屬性取代get和set方法

注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、從其他語言轉入python的開發者,一般可能在設計類的時候,在其中填寫get和set方法,用來獲取和設定類的成員屬性。

Python語言學習講解十六python之描述符__set__和__get__ 等解釋

注:每週一到週五都會進行相關Python基礎知識更新,歡迎大家提寶貴的意見 一、方法: 首先說下python中存在的幾種方法:物件方法、靜態方法、類方法等,歸屬權分別為obj、cls、cls 其實可以從他們的引數中就可以看的出來 物件方法引數中含有self,這個

Python 語言學習 第二篇數據類型(字符串)

拼接 查找字符 保留 upper gis 原始的 一次 \n 處的 字符串是一個有序的字符的不可變序列,用於存儲基於文本的信息。字符串所包含的字符存在從左至右的位置順序,不可以在原處(in-place)修改。Python沒有C語言的字符和字符串之分,只有字符串。從嚴格意義上

Android學習筆記SQLite判斷一張表是否存在

CREATE TABLE sqlite_master ( type TEXT, name TEXT, tbl_name TEXT, rootpage INTEGER, sql TEXT ); 對於表來說,type 欄位永遠是 ‘table’,name 欄位永遠是表的名字。所以,要獲得資料庫中所有表的列表,

Python 語言學習 第三篇陣列型別(列表、字典和元組)

列表和欄位都可以在原處進行修改,可以按照需求增長或縮短,並且可以包含任何型別的物件或被巢狀。列表和字典儲存的是物件的引用,而不是拷貝。 一,列表 列表是有序的序列,每一個列表項的順序是固定的,這使得列表可以通過指定的偏移來索引和分片。列表是可變的序列,支援在原處修改。 列表項可以是任何型別,或物件,也可

Python 語言學習 第四篇動態型別模型

Python的變數不用宣告,賦值之後就可以直接使用,型別是在執行過程中自動確定的,這就是動態型別模型。該模型把變數和物件設計成兩個不同的實體,物件是儲存資料的地方,物件的型別是由初始值自動決定的,而變數僅僅是物件的引用。變數是通用的,同一個變數名可以引用任何型別的物件。 一,變數、物件和引用 動態型別模型

Web安全學習筆記()SQL-結構化查詢語言

.com 時也 create 取數據 數據操作 date 簡單的 esc 標準 SQL概述: 結構化查詢語言(Structured Query Language)簡稱SQL,是一種特殊目的的編程語言,是一種數據庫查詢和程序設計語言,用於存取數據以及查詢、更新和管理關系數據庫

Java語言學習集合類框架

    Java中提供了各種資料集合類,這些類主要用於儲存複雜結構的資料。下面將介紹常用的幾種集合類的用法。     ArrayList集合可以看做一個動態的陣列,比普通陣列更加靈活,更適合儲存未知數量的資料。它突破了普通陣列固定長度的限制,可以隨時向陣列

golang語言學習第二課變數型別及常量列舉

go語言的變數型別: bool (true為0,false不等於0), string  int 分好多種int,有點頭暈,但用預設的int就足夠了,根據機器判斷,是32位的用int32,是64位的用int64. byte, 又是uint8的別名。 rune(類似char,但是

Cris 學習Python日記(二)條件判斷語句

1、if 語句和input 函式 # 條件判斷語句(if 語句) # 語法:if 條件表示式: # 程式碼塊 # 預設情況下,if 語句只會控制僅僅跟在後面的那條語句,如

Python 語言學習 第六篇迭代和解析

Python 語言學習 第六篇:迭代和解析 Python中的迭代是指按照元素的順序逐個呼叫的過程,迭代概念包括:迭代協議、可迭代物件和迭代器三個概念。 迭代協議是指有__next__()函式的物件會前進到下一個結果,而到達系列的末尾時,則會引發StopIteration異常。為了支援迭代協議

Python 語言學習 第七篇函式1(定義、呼叫和變數的作用域)

函式是把一些語句集合在一起的程式結構,用於把複雜的流程細分成不同的元件,能夠減少程式碼的冗餘、程式碼的複用和修改程式碼的代價。 函式可以0個、1個或多個引數,向函式傳遞引數,可以控制函式的流程。函式還可以返回程式碼執行的結果,從技術上講,任何函式都要返回結果,一個沒有返回值的函式會自動返回none物件。如果

Python 語言學習 第九篇模組

模組是把程式程式碼和資料封裝的Python檔案,也就是說,每一個以副檔名py結尾的Python原始碼檔案都是一個模組。每一個模組檔案就是一個獨立的名稱空間,用於封裝頂層變數名;在一個模組檔案的頂層定義的所有的變數名(函式名也是一個變數名),稱作模組的屬性。匯入模組給予了對模組的全域性作用域中的變數名的讀取權,

Python語言學習常見的幾個坑

1、混用空格和tab python是嚴格縮排的,全用空格或者全用tab就沒錯,如果是混用就會有問題。如果用vim開發的話,一般是在配置中把tab轉成4個空格。 2、用可變物件作為預設引數 def f(a=[]): a.append('kzc') return